这是一个简单的C# while循环,但它在无限循环中运行。
int count = 1;
while (count < 10)
{
count = count++;
}
为什么会这样呢?count++
返回计数器的原始值,然后增加该值。因此,每次都会使用相同的值覆盖计数器。只需执行以下操作即可:count++;
如果你感兴趣,这是一篇 Eric Lippert 的文章链接,它区分了运算符优先级和评估顺序 - 这是一个有趣的阅读:
http://blogs.msdn.com/b/ericlippert/archive/2009/08/10/precedence-vs-order-redux.aspx
count = count++;
会导致问题,并且解决方案是简单的 count++
而不是赋值,请解释原因。 - Fenton这将会无限循环。
有两种变量递增的方式:
在这里,count++
和 ++count
是不同的,如果你使用了 ++count
,它就会生效。
在这里,count = count++
表示计数变量将会加一,然后把之前的值1赋给计数变量本身,所以计数变量不会改变。
count = count++;
不会使 count
值增加1。 x++
是后增量运算符,这意味着表达式返回的值是旧值。因此,在你的代码中,以下内容发生:
int oldValue = count;
count = count + 1;
count = oldValue;
你可能想要写的是 count++;
(没有 "count =
")。
更多相关信息请参考下面的 SO 问题:
++运算符首先保存当前值,然后递增,最后返回保存的值,因此count
将永远不会改变。
要么使用++
运算符,要么进行赋值。以下所有方法都是等效的:
count++;
count += 1;
count = count + 1;
count = count++;
这是后增加运算符。它会执行以下操作。
int temp = count;
count++;
count = temp;
while (count < 10)
{
++count;
}
因为
count++
返回count
,而不是count+1
只需使用 count++ 而没有赋值或:
count = ++count;
最后一个只是为了解释,但你不应该使用它...
来自: ++ 运算符 (C# 参考)
第一种形式是前缀递增操作。操作的结果是操作数在递增后的值。
第二种形式是后缀递增操作。操作的结果是操作数在递增之前的值。
数字和枚举类型具有预定义的递增运算符。用户定义的类型可以重载 ++ 运算符。对整数类型的操作通常允许在枚举上进行。
它是无限的,因为您实际上没有增加计数。
count = count++; 将值1分配给计数,然后递增计数,但由于您没有分配递增值,因此计数永远不会增加。
您需要执行以下操作之一:
count++;
或者
count = ++count;
count = ++count;
替换那一行,这段代码会工作,但仍然是"不正确的"。 - Heinzicount = count++;
) 没有意义。写整洁的代码就可以了:count++;
- Pavel Hodek