在 while 循环中将值分配给布尔值
本文关键字:分配 布尔值 while 循环 | 更新日期: 2023-09-27 18:36:10
我知道这是一个非常新手的C#问题,但我正在实现一个小程序,它执行以下操作:
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
bool isRun = false;
int number = 0;
while (isRun = (true) && number < 3)
{
++number;
Console.WriteLine("Number = {0}", number.ToString());
Console.WriteLine();
}
Console.WriteLine(isRun.ToString());
Console.ReadLine();
}
}
}
在 while 循环结束时,我本来期望 bool
值为真,但打印为 false
。为什么?这与C++有什么不同吗,我会做类似的事情,而 C# 中的同样事情给了我错误
while(number<3)
{
is = true;
}
if(is){
cout<<true;
}
您看到此行为的原因是由于所涉及的运算符优先级。 在这里,&&
的绑定比=
的绑定更强烈,因此循环中的代码实际上绑定如下
while (isRun = (true && number < 3)) {
...
}
number > 3
后,&&
表达式false
并分配给isRun
值并同时终止循环。 因此,一旦循环退出,您将看到isRun
false
要获得您正在寻找的行为,您需要使用 paren 手动更正优先级。
while ((isRun = (true)) && number < 3) {
...
}
注意:一般来说,正如@Servey指出的那样,将局部变量分配给循环谓词内的表达式被认为是不好的做法。 许多 C# 用户实际上会对代码的编译感到惊讶,因为他们已经习惯于只在循环中使用==
。
简单地将isRun
设置为在此模式的循环的第一行true
更惯用。
while (number < 3) {
isRun = true;
...
}
问题是你已经将boolean
变量设置为 false
并且没有将其赋回 true
,在 while 循环中,您matching
它与value true
,因此它every
情况下fails
。