gpt4 book ai didi

c# - 如何使用 Func<> 更新对象属性?

转载 作者:行者123 更新时间:2023-11-30 20:15:56 24 4
gpt4 key购买 nike

Is it somehow possible to update object properties by using Func with lambda expression?


Foo 类

public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
//... many others
}

实用类

public static class Updater
{
public Foo FooUpdate(Foo item, params Func<Foo, object> properties)
{
foreach(var property in properties)
{
//take value of property and set it on item object
}
return item
}
}

初始通话

   var updatedFoo = Updater.FooUpdate(item, p => p.Id = 10, p => p.Name = "Test", ...);

FooUpdate 方法之后,我想接收 updatedFoo 对象,在给定的调用中使用给定的值参数。 Id = 10Name = "Test"

最佳答案

Func<Foo, object>签名无效。 λ p => p.Id = 10不返回 object .如果你想简单地改变现有的方法来工作,那么这样做:

 public Foo FooUpdate(Foo item, params Action<Foo> properties)
{
foreach(var property in properties)
{
property(item);
}
return item
}

但请注意,这是一个非常糟糕的设计。首先,您的方法都修改了传递的 item并返回它 - 它应该修改它(并返回 void )或离开 item照原样克隆它,然后修改并返回克隆。其次,我认为这个 Util 没有任何值(value)。方法。对它的任何调用都等同于逐行应用更新。

var updatedFoo = Updater.FooUpdate(item, p => p.Id = 10, p => p.Name = "Test", ...);

相同
item.Id = 10;
item.Name = "Test";
/* ... */

关于c# - 如何使用 Func<> 更新对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com