在C#中使用`x + = 1`而不是`++ x`是否有任何副作用?

时间:2014-11-15 19:39:26

标签: javascript c# post-increment pre-increment

我总是使用for在C#中编写for (int i = 0; i < 10; i++)个循环。

我一直在阅读JavaScript的最佳做法(JavaScript:好的部分),其中一个是x += 1优先于x++

在性能,原子性和功能等方面,两者之间是否有任何差异,在C#中。

我问,因为在C#(和C ++以及可能是大多数其他基于C的语言)中++xx++之间存在功能差异 ;前者是预增量,它增加变量然后返回值,后者是后增量,它返回值,然后递增它(实际上,这两个微妙的差异引起了我对在我的C#代码中采用x += 1策略的兴趣。

更新

以下两种方法,method1使用++xmethod2使用x += 1

   static void method1()
    {
        int x = 1;
        int y = ++x;

        Console.WriteLine(x);
        Console.WriteLine(y);
    }

    static void method2()
    {
        int x = 1;
        int y = x += 1;

        Console.WriteLine(x);
        Console.WriteLine(y);
    }

这产生以下IL:

方法1

enter image description here

方法2

enter image description here

似乎存在一些细微差别,但我对IL的理解还不足以回答“是否有任何差异”的问题。

1 个答案:

答案 0 :(得分:3)

完全没有区别。从x += 1x++翻译的中间语言完全相同:

int x = 0;
x++; // or x += 1;

IL代码是:

IL_0001:  ldc.i4.0    
IL_0002:  stloc.0     // x
IL_0003:  ldloc.0     // x
IL_0004:  ldc.i4.1    
IL_0005:  add         
IL_0006:  stloc.0     // x