我想做类似的事情:
SetPropertyValue(ref class1.Sport, prop2);
private static void SetPropertyValue(ref Prop1 prop1, bool prop2)
{
prop1 = new Prop1
{
BoolValue = prop2,
};
}
答案 0 :(得分:3)
您可以使用Lambda表达式和方法在属性上调用setValue。
创建此方法:
public void SetPropertyValue<O, T>(O obj, Expression<Func<O, T>> property, T value)
{
var memberSelectorExpression = property.Body as MemberExpression;
if (memberSelectorExpression != null)
{
var p = memberSelectorExpression.Member as PropertyInfo;
if (p != null)
{
p.SetValue(obj, value, null);
}
}
}
然后叫它
SetPropertyValue(textBox1, (t=>t.BackColor), Color.Red );
请参阅:
How to set property value using Expressions?
正如Servy所说,性能可能对你来说是一个问题。您还可以使用CodeProject中描述的其他技术:
http://www.codeproject.com/Articles/584720/ExpressionplusbasedplusPropertyplusGettersplusandp
答案 1 :(得分:2)
由于您已经拥有对该属性的强引用,因此您不需要“动态”设置它。您所需要做的就是:
class1.Sport = CreateProp1(prop2);
private Prop1 CreateProp1(bool initialBoolValue)
{
return new Prop1()
{
BoolValue = initialBoolValue;
}
}
更好的是修改Prop1以获得一个带有bool的构造函数:
public Prop1(bool initialBoolValue)
{
BoolValue = initialBoolValue;
}
class1.Sport = new Prop1(prop2);
答案 2 :(得分:0)
你可以这样做:
class1.Sport = myProperty(property);