如果我有以下扩展方法:
internal static class Extensions
{
public static void Increase(this uint value)
{
value += 1;
}
public static void Decrease(this uint value)
{
if (value > 0) value -= 1;
}
}
为什么这不会导致i
更改为1?
uint i = 0;
i.Increase();
答案 0 :(得分:13)
参数正在按值传递,即全部。在这方面,扩展方法没有什么特别之处。它相当于:
Extensions.Increase(i);
您需要使用该方法通过引用传递第一个参数(使用ref
)才能产生任何效果......并且无论如何都禁止使用扩展方法。
因此,虽然您可以编写一个方法,允许您将其称为:
Extensions.Increase(ref i);
您无法将其作为扩展方法。
另一种方法是让方法返回一个值,此时你可以:
i = i.Increase();
如果您不完全清楚传递引用和按值传递语义,则可能需要阅读我的article on the topic。