在C#中,myInt ++和++ myInt有什么区别?

我很难理解用C#递增变量之间的区别是什么:

myInt++; 

 ++myInt; 

什么时候你会使用哪一个?

我会给voteCount ++以获得最佳答案。 或者我应该给它++ voteCount …

单独编写(如图所示)没有区别 – 在两种情况下myInt都会增加1。

但是当你在表达式中使用它时会有所不同,例如:

 MyFunction(++myInt); MyFunction(myInt++); 

在第一种情况下,myInt递增,新的/递增的值传递给MyFunction()。 在第二种情况下,myInt的旧值传递给MyFunction()(但myInt在调用函数之前仍然递增)。

另一个例子是:

 int myInt = 1; int a = ++myInt; // myInt is incremented by one and then assigned to a. // Both myInt and a are now 2. int b = myInt++; // myInt is assigned to b and then incremented by one. // b is now 2, myInt is now 3 

BTW:正如Don在评论中指出的那样,相同的规则对递减操作也是有效的,这些操作的正确术语是:

 ++i; // pre-increment i++; // post-increment --i; // pre-decrement i--; // post-decrement 

正如Jon Skeet所指出的那样:

其他人已经certificate它在哪里有所作为,并评论说,作为单一陈述,它没有任何区别。

我想补充一点,在它产生影响的地方使用它几乎总是一个坏主意。 我怀疑有时可能会有更多可读代码,例如:

 Console.WriteLine("Foo: {0}", foo++); 

比:

 Console.WriteLine("Foo: {0}", foo); foo++; 

……但它们非常罕见! 这两个样本中的后者使得排序晶体立即变得清晰 – 前者需要一点思考(无论如何,对于我的可怜的大脑)。 首先考虑可读性。

其他人已经certificate它在哪里有所作为,并评论说,作为单一陈述,它没有任何区别。

我想补充一点,在它产生影响的地方使用它几乎总是一个坏主意。 我怀疑有时可能会有更多可读代码,例如:

 Console.WriteLine("Foo: {0}", foo++); 

比:

 Console.WriteLine("Foo: {0}", foo); foo++; 

……但它们非常罕见! 这两个样本中的后者使得排序晶体立即变得清晰 – 前者需要一点思考(无论如何,对于我的可怜的大脑)。 首先考虑可读性。

除非它在表达式中,否则它不会

 myInt=1; x=myInt++; 

不同于:

 myInt=1; x=++myInt; 

第一个将1分配给x,因为赋值发生在增量之前。

第二个将2分配给x,因为赋值发生在增量之后。

例如,在赋值或表达式中

 x = ++myInt; // x = myInt + 1 x = myInt++; // x = myInt 

这也可以用在for循环或if语句之类的表达式中。 例如,如果seek为0且count为3,请执行以下操作。

 while(seek++ < count) { Console.WriteLine(seek); } 

导致输出1,2和3,用于搜索,以及以下

 while(++seek < count) { Console.WriteLine(seek); } 

搜索结果为1和2。 所以++ myInt在评估其值之前递增myInt,其中myInt ++在评估之后递增。

myInt ++(4个CPU指令)

 LOAD AX, #myInt // From myInt memory to a CPU register COPY AX, BX INCREMENT BX STORE BX, #myInt // Use AX register for the value 

++ myInt(3个CPU指令)

 LOAD AX, #myInt // From myInt memory to a CPU register INCREMENT AX STORE AX, #myInt // Use AX register for the value 

如果你这样做,那就不一样了

 int x = 7; int x2 = x++; => x2 is 7 and x is 8 

但是在做的时候

 int x = 7; int x2 = ++x; => x2 is 8 and x is 8 

预修复操作符++ myInt是一种减少行的方法:在将变量传递给其他地方之前增加变量。 这也是一种降低可读性的好方法,因为它并不常见。

 MyMethod(++myInt); 

 myInt++; MyMethod(myInt); 

对我来说,第二个更容易阅读。

它确定何时返回该操作的结果。

以下是MSDN站点的示例:

 static void Main() { double x; x = 1.5; Console.WriteLine(++x); x = 1.5; Console.WriteLine(x++); Console.WriteLine(x); } 

和输出:

 2.5 1.5 2.5 

我认为从评估修改的顺序来看,这是最简单的理解。

  • 后缀运算符(x ++)首先计算修改最后一个。
  • 前缀运算符(++ x)首先修改并最后计算

(操作顺序在运算符和变量的类型顺序中很明显)

即,当在表达式中使用时,后缀运算符在应用运算符之前计算并使用表达式中的变量的当前值(返回语句或方法调用)。 使用前缀运算符是另一种方式。

++ myInt会在执行相关行之前向myInt添加一个,myInt ++将在之后执行。

例子:

 int myInt; myInt = 1; someFunction(++myInt); // Sends 2 as the parameter myInt = 1; someFunction(myInt++); // Sends 1 as the parameter 

例如,如果您执行以下操作:

 int myInt = 5; Foo(++myInt); void Foo(int x) { Console.WriteLine(x); } 

这将打印6。

 Foo(myInt++); 

将打印5;

基本上,++ myInt增量FIRST使用变量SECOND。 myInt ++恰恰相反。