栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过C#中的引用传递属性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过C#中的引用传递属性

属性不能通过引用传递。您可以通过以下几种方法来解决此限制。

1.返回值

string GetString(string input, string output){    if (!string.IsNullOrEmpty(input))    {        return input;    }    return output;}void Main(){    var person = new Person();    person.Name = GetString("test", person.Name);    Debug.Assert(person.Name == "test");}

2.委托

void GetString(string input, Action<string> setOutput){    if (!string.IsNullOrEmpty(input))    {        setOutput(input);    }}void Main(){    var person = new Person();    GetString("test", value => person.Name = value);    Debug.Assert(person.Name == "test");}

3. LINQ表达式

void GetString<T>(string input, T target, expression<Func<T, string>> outExpr){    if (!string.IsNullOrEmpty(input))    {        var expr = (Memberexpression) outExpr.Body;        var prop = (PropertyInfo) expr.Member;        prop.SetValue(target, input, null);    }}void Main(){    var person = new Person();    GetString("test", person, x => x.Name);    Debug.Assert(person.Name == "test");}

4.反思

void GetString(string input, object target, string propertyName){    if (!string.IsNullOrEmpty(input))    {        prop = target.GetType().GetProperty(propertyName);        prop.SetValue(target, input);    }}void Main(){    var person = new Person();    GetString("test", person, nameof(Person.Name));    Debug.Assert(person.Name == "test");}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465497.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号