为什么这个循环无限地工作

24 c# loops

这是C#中的一个简单的while循环,但它无限工作.

int count = 1;
while (count < 10)
{
    count = count++;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Joh*_*hnD 58

表达式count++返回count的原始值,然后递增该值.

所以你每次都用相同的值覆盖计数.这样做:

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

对于好奇,这里是Eric Lippert的文章的链接,它区分了运算符优先级和评估顺序 - 这是一个有趣的读物:

http://blogs.msdn.com/b/ericlippert/archive/2009/08/10/precedence-vs-order-redux.aspx

  • 抱歉,这与运营商优先级无关.另外,说"事后"不准确:值递增,然后*然后返回一个值,恰好是返回*old*值,参见[Eric Lippert的这个答案](http:/ /stackoverflow.com/questions/3346450/c-what-is-the-difference-between-i-and-i/3346729#3346729)了解详情. (6认同)

Nig*_*hil 35

这将无限循环.

递增变量有两种类型:

这里count++++count 两者都不同,如果你已经使用++count 它将工作.

count = count++意味着计数变量将加1,然后将较早的值1分配给计数变量本身,因此计数保持不变.


Hei*_*nzi 27

count = count++;没有增加count一个.x++增量运算符,它意味着由表达式返回的值是的值.因此,在您的代码中,会发生以下情况:

int oldValue = count;
count = count + 1;
count = oldValue;
Run Code Online (Sandbox Code Playgroud)

你可能想写的是count++;(没有" count =").

有关这方面的更多详细信息,请参阅以下SO问题:


And*_*bel 7

++运算符首先保存当前值然后递增,最后返回保存的值,因此count永远不会改变.

Eiter使用++操作员或进行任务.这些都是等价的:

count++;
count += 1;
count = count + 1;
Run Code Online (Sandbox Code Playgroud)

  • 这不是++运算符的作用.它首先*保存当前值*,然后递增,然后返回保存的值.它在*之前不会返回值*. (4认同)

Luc*_*ore 5

count  = count++;
Run Code Online (Sandbox Code Playgroud)

这是一个后增量.它做了以下.

int temp = count;
count++;
count = temp;
Run Code Online (Sandbox Code Playgroud)

所以你不会增加数量.请改用以下内容:

while (count  < 10)
{
    ++count;
}
Run Code Online (Sandbox Code Playgroud)