Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在while循环中为bool赋值_C# - Fatal编程技术网

C# 在while循环中为bool赋值

C# 在while循环中为bool赋值,c#,C#,我知道这是一个非常新的C#问题,但我正在实施一个小程序,它可以实现以下功能: namespace ConsoleApplication { class Program { static void Main(string[] args) { bool isRun = false; int number = 0; while (isRun = (true) && number < 3

我知道这是一个非常新的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 (isRun = (true && number < 3)) {
  ...
}
注意:一般来说,正如@Servey所指出的,将局部变量赋值给循环谓词内的表达式被认为是不好的做法。实际上,许多C#用户会对代码的编译感到惊讶,因为他们已经习惯于只在循环中使用
=

对于这种模式,在循环的第一行简单地将
isRun
设置为
true

while (number < 3) {
  isRun = true;
  ...
}
while(数字<3){
isRun=true;
...
}

问题在于,您已将
布尔
变量设置为
,而没有将其重新分配回
,在while循环中,您正在将它与
值真
进行匹配,因此,它在
每种情况下都会失败。

哇,补充代码改变了问题……值得一提的是,在这样的条件表达式中引起副作用通常是不好的做法。变异效应应该在循环内部,条件应该没有副作用。他将其赋值为true,而不是将其与true进行比较。它是
=
而不是
=
while ((isRun = (true)) && number < 3) {
  ...
}
while (number < 3) {
  isRun = true;
  ...
}