C#扩展方法不适用于递增和递减方案,是否按设计?

Mvs*_*vsW 3 c# extension-methods

我正在尝试一个简单的扩展方法示例,我无法增加或减少一个int.这是代码

static class ExtensionMethodsExp
{
    public static void Print(this object o)
    {
        Console.WriteLine("This is print: {0}", o.ToString());
    }

    public static int Double(this int i)
    {
        return i * 2;
    }
    public static int Decrement(this int i)
    {
         return i--;
    }

    public static int Increment(this int i)
    {
        return i++;

    }
}
Run Code Online (Sandbox Code Playgroud)

}

程序代码是

class Program
{
    static void Main(string[] args)
    {

       int myNumber = 10;
       myNumber.Print();

       myNumber = myNumber.Double();
       myNumber.Print();

       myNumber = myNumber.Decrement(); 
       myNumber.Print();

       myNumber = myNumber.Increment();
       myNumber.Print();

       myNumber.Increment().Double().Print();
       Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在关注输出

这是印刷品:10

这是印刷品:20

这是印刷品:20

这是印刷品:20

这是印刷品:40

任何想法为什么减少或增量不应该在这里工作.有什么我想念的吗?谢谢

Ger*_*och 8

试试这个:

public static int Decrement(this int i)
{
     return --i;
}

public static int Increment(this int i)
{
    return ++i;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为i + 1和i-1会更清晰 - 不需要增加输入值,因为它不会再次使用. (9认同)

Rob*_*vey 5

您的代码无法正常工作的原因是您使用Increment和Decrement运算符的方式.

当你写:

return i++;
Run Code Online (Sandbox Code Playgroud)

在增量发生之前返回i的值.

试试这个:

return ++i;
Run Code Online (Sandbox Code Playgroud)

或者更好的是,这个:

return i + 1;
Run Code Online (Sandbox Code Playgroud)