您需要在properties
中传递“setter方法”而不是“reader method”。
static void Nullify<T, D>(T item, params Action<T, D>[] properties)
where D : class
{
foreach (var property in properties)
{
property(item, null);
}
}
用法:
Nullify<Kitten, string>(kitten, (c, d) => { c.Name = d; });
但是,这将只设置数据为您服务。如果你想要一个副本,然后应用性能,该项目很可能必须是可克隆(或者你也可以去,虽然有些地狱反射):
static T Nullify<T, D>(T item, params Action<T, D>[] properties)
where D : class
where T : ICloneable
{
T copy = (T)item.Clone();
foreach (var property in properties)
{
property(copy, null);
}
return copy;
}
class Kitten : ICloneable
{
public string Name { get; set; }
public string FurColour { get; set; }
public object Clone()
{
return new Kitten() { Name = this.Name, FurColour = this.FurColour };
}
}
使用
var anonymousKitten = Nullify(kitten, (c, d) => { c.Name = d; });
你想要一个新的实例,或者用空的属性一样吗?目前尚不清楚,因为你的方法返回'无效' – ken2k
对不起,我复制代码时发生错字。同样的例子。 – NibblyPig