是否可以通过使用某种方式更新对象属性
Func
带有lambda表达式?
富班
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 = 10
和Name = "Test"
。 最佳答案
Func<Foo, object>
签名无效。 Lambda 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
方法中我看不到任何价值。对其的任何调用都等同于仅逐行应用更新。var updatedFoo = Updater.FooUpdate(item, p => p.Id = 10, p => p.Name = "Test", ...);
是相同的
item.Id = 10;
item.Name = "Test";
/* ... */