通过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