繁体   English   中英

是否可以制作一个方法来设置作为参数传递给它的Property的值?

[英]Is it possible to make a method that sets the value of a Property which is passed to it as a parameter?

我想做类似的事情:

SetPropertyValue(ref class1.Sport, prop2);

private static void SetPropertyValue(ref Prop1 prop1, bool prop2)
{
    prop1 = new Prop1
    {
        BoolValue = prop2,
    };
}

您可以使用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 );

看到:

如何使用表达式设置属性值?

正如Servy建议的那样,性能可能对您来说是个问题。 您还可以使用CodeProject中描述的另一种技术:

http://www.codeproject.com/Articles/584720/ExpressionplusbasedplusPropertyplusGettersplusandp

由于您已经对该属性有很强的引用,因此不需要“动态”设置它。 您需要做的只是:

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

您可以这样做:

class1.Sport = myProperty(property);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM