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

Mic*_*cah 7 c# syntax

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

myInt++;
Run Code Online (Sandbox Code Playgroud)

++myInt;
Run Code Online (Sandbox Code Playgroud)

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

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

M4N*_*M4N 52

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

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

MyFunction(++myInt);
MyFunction(myInt++);
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,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
Run Code Online (Sandbox Code Playgroud)

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

++i; // pre-increment
i++; // post-increment
--i; // pre-decrement
i--; // post-decrement
Run Code Online (Sandbox Code Playgroud)

正如Jon Skeet指出:

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

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

Console.WriteLine("Foo: {0}", foo++);
Run Code Online (Sandbox Code Playgroud)

比:

Console.WriteLine("Foo: {0}", foo);
foo++; 
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*eet 11

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

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

Console.WriteLine("Foo: {0}", foo++);
Run Code Online (Sandbox Code Playgroud)

比:

Console.WriteLine("Foo: {0}", foo);
foo++;
Run Code Online (Sandbox Code Playgroud)

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


fra*_*yer 9

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

myInt=1;
x=myInt++;
Run Code Online (Sandbox Code Playgroud)

不同于:

myInt=1;
x=++myInt;
Run Code Online (Sandbox Code Playgroud)

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

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


ng.*_*ng. 6

例如,在赋值或表达式中

x = ++myInt; // x = myInt + 1
x = myInt++; // x = myInt
Run Code Online (Sandbox Code Playgroud)

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

while(seek++ < count) {
   Console.WriteLine(seek);
}
Run Code Online (Sandbox Code Playgroud)

结果输出1,2和3,用于搜索和以下

while(++seek < count) {
   Console.WriteLine(seek);
}
Run Code Online (Sandbox Code Playgroud)

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