c# - 使用指向属性的 func 设置值

标签 c# .net

假设我有一个模型:

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

比我有一个指向 MyProperty 的 Func:

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

所以,使用这个函数我想更改初始化对象的属性:

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

最佳答案

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

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

并像这样使用它:

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

或者,如果您对返回值不感兴趣,您可以将 Func 转换为 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);

关于c# - 使用指向属性的 func 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51243216/

相关文章:

c# - 解析是获取成员类型的唯一方法吗?

c# - 转换器不转换文化数字格式?

c# - Azure错误: DefaultAzureCredential authentication failed

c# - 如何将 C++ 类转换为托管类并在其中调用纯虚函数?

c# - 如何在 C# 中设置存储库中的一些实体属性?

c# - ComboBox 在 SelectionChangeCommitted 上获得了新的 SelectedValue 但没有获得新的 SelectedText

c# - 从不同的项目 .Net 访问 protobuf

c# - IPAddress.ToString 中的地址后面的百分号是什么?

c# - 解锁我的关卡生成器?

python - 无法将.Net的SaveFileDialog与pythonnet一起使用