C#用扩展方法改变一个值

时间:2016-02-02 21:31:11

标签: c#

如果我有以下扩展方法:

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();

1 个答案:

答案 0 :(得分:13)

参数正在按值传递,即全部。在这方面,扩展方法没有什么特别之处。它相当于:

Extensions.Increase(i);

您需要使用该方法通过引用传递第一个参数(使用ref)才能产生任何效果......并且无论如何都禁止使用扩展方法。

因此,虽然您可以编写一个方法,允许您将其称为:

Extensions.Increase(ref i);

您无法将其作为扩展方法。

另一种方法是让方法返回一个值,此时你可以:

i = i.Increase();

如果您不完全清楚传递引用和按值传递语义,则可能需要阅读我的article on the topic