假设我有一个模型:
public class MyModel
{
public int MyProperty { get; set; }
}
我有一个指向MyProperty的Func:
Func<MyModel, int> func = x => x.MyProperty;
因此,我想使用此函子更改初始化对象的属性:
var myModel = new MyModel();
?????
答案 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);