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

我正在尝试执行以下操作:

GetString(

inputString,

ref Client.WorkPhone)

private void GetString(string inValue, ref string outValue)

{

if (!string.IsNullOrEmpty(inValue))

{

outValue = inValue;

}

}

这给了我一个编译错误。我认为我正在努力实现的目标很明确。基本上,我想GetString将输入字符串的内容复制到的WorkPhone属性Client

是否可以通过引用传递属性?

回答:

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

回答:

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");

}

回答:

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");

}

回答:

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");

}

回答:

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");

}

以上是 通过C#中的引用传递属性 的全部内容, 来源链接: utcz.com/qa/424326.html

回到顶部