-2

我知道这是一个非常新手的 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值为 true,但 is 打印为false. 这是为什么?这与 C++ 有什么不同吗?在 C++ 中我会做类似的事情,而 C# 中的同样事情给了我错误

while(number<3)
{
is = true;
}
if(is){
cout<<true;
}
4

2 回答 2

6

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

while (isRun = (true && number < 3)) {
  ...
}

一旦表达式被赋值给number > 3值并同时终止循环。因此,一旦循环退出,您将看到&&falseisRunisRunfalse

要获得您正在寻找的行为,您需要使用括号手动更正优先级。

while ((isRun = (true)) && number < 3) {
  ...
}

注意:通常,正如@Servey 指出的那样,将局部变量分配给循环谓词内的表达式被认为是不好的做法。许多 C# 用户实际上会对代码完全编译感到惊讶,因为它们已被限制为仅==在循环中使用。

在此模式的循环的第一行简单地设置isRun为更惯用。true

while (number < 3) {
  isRun = true;
  ...
}
于 2012-06-04T15:21:53.790 回答
-1

问题是您已将boolean变量设置为false并且没有将其分配回true,在 while 循环中,您是matching针对 的value true,因此以防fails万一every

于 2012-06-04T15:24:25.717 回答