在循环中为bool赋值

时间:2012-06-04 15:16:16

标签: c#

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

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

2 个答案:

答案 0 :(得分:6)

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

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

number > 3 &&表达式为falseisRun并分配到isRun值并同时终止循环。因此,一旦循环退出,您将false视为while ((isRun = (true)) && number < 3) { ... }

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

==

注意:通常,正如@Servey指出的那样,将局部表分配给循环谓词中的表达式被认为是不好的做法。许多C#用户实际上会对代码编译感到惊讶,因为他们已经习惯于只在循环中使用isRun

在此模式的循环的第一行简单地设置truewhile (number < 3) { isRun = true; ... } 更为惯用。

{{1}}

答案 1 :(得分:-1)

问题在于,您已将boolean变量设置为false而未将其分配回true,而在while循环中,您matchingvalue true 1}},因此在fails案例中every