在 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 循环中将值分配给布尔值

您看到此行为的原因是由于所涉及的运算符优先级。 在这里,&&的绑定比=的绑定更强烈,因此循环中的代码实际上绑定如下

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