您需要在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