我总是将扩展方法用作不可变的,并为其执行的任何对象生成新的和改进的版本。
public static ReferenceType Biggify(this ReferenceType self)
{
return self.Something();
}
现在我意识到,让这样的扩展方法对 self 进行操作并且不返回插孔可能会很好。
public static void Biggify(this ReferenceType self)
{
self = self.SomethingElse();
}
但是,我意识到上述操作只会在 self 的副本上执行,当我们退出方法的范围时,变异将被丢弃。
如果是的话......
答案 0 :(得分:1)
没有
扩展方法的第一个(this
)参数不能是ref
,因此您无法修改对传入对象的引用。
实际上,如果对象本身是可变扩展,则可以轻松地明确更改对象:
void AddCouple<T>(this List<T> list) where T:new()
{
list.Add(new T());
list.Add(new T());
}
或无意中喜欢:
List<T> AddToCopy<T>(this List<T> list, T newItem)
{
var newList = list;
newList.Add(newItem); // changed existing list...
return newList;
}
Doesn't C# Extension Methods allow passing parameters by reference?中还有一些额外的讨论,尤其是对不可变类型/值类型的扩展。