使用func指向属性设置值

时间:2018-07-09 10:20:57

标签: c# .net

假设我有一个模型:

public class MyModel 
{
    public int MyProperty { get; set; }
}

我有一个指向MyProperty的Func:

Func<MyModel, int> func = x => x.MyProperty;

因此,我想使用此函子更改初始化对象的属性:

var myModel = new MyModel();
?????

1 个答案:

答案 0 :(得分:2)

您需要将“ MyProperty”的新值作为参数传递给Func

    Func<MyModel,int, int> func = (x, newValue) => 
    {
        x.MyProperty = newValue;
        return newValue;
    };

并像这样使用它:

    var m = new MyModel();
    func(m, 2);

或者,如果您对返回值不感兴趣,则可以将Func变成and Action:

Action<MyModel,int> func = (x, newValue) => x.MyProperty = newValue;

此外,您可以捕获闭包中的“ MyModel”变量,这样就不必在每次要更改“ MyProperty”的值时都显式传递实例:

var myModel = new MyModel();    

Func<MyModel, Action<int>> getSetter = x => 
  newValue=>x.MyProperty = newValue;

var setter = getSetter(myModel);

setter(3);
setter(4);