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

通过C#中的引用传递属性,第1张

通过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");}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5440992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存