我知道这是一个非常新手的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;
}
答案 0 :(得分:6)
您看到此行为的原因是由于涉及运算符优先级。这里&&
比=
绑定得更强,所以循环中的代码实际上绑定为以下
while (isRun = (true && number < 3)) {
...
}
number > 3
&&
表达式为false
后isRun
并分配到isRun
值并同时终止循环。因此,一旦循环退出,您将false
视为while ((isRun = (true)) && number < 3) {
...
}
要获得您正在寻找的行为,您需要手动更正parens的优先级。
==
注意:通常,正如@Servey指出的那样,将局部表分配给循环谓词中的表达式被认为是不好的做法。许多C#用户实际上会对代码编译感到惊讶,因为他们已经习惯于只在循环中使用isRun
。
在此模式的循环的第一行简单地设置true
到while (number < 3) {
isRun = true;
...
}
更为惯用。
{{1}}
答案 1 :(得分:-1)
问题在于,您已将boolean
变量设置为false
而未将其分配回true
,而在while循环中,您matching
对value true
1}},因此在fails
案例中every
。