C# bool在c中未设置为true#

C# bool在c中未设置为true#,c#,C#,我就是想不起这个简单的问题 我有一个布尔值,我正在将它作为测试的输出: // these are passed in to the function and will vary bool inReview = true; char status = 'V'; bool test = (inReview && status != 'M') || !inReview; 评估结果如下: bool test = (true && true) || !true; 这应

我就是想不起这个简单的问题

我有一个布尔值,我正在将它作为测试的输出:

// these are passed in to the function and will vary
bool inReview = true;
char status = 'V';

bool test = (inReview && status != 'M') || !inReview;
评估结果如下:

bool test = (true && true) || !true;
这应该是真的-但是调试器显示“test”的值为假

当我尝试这个:

bool inReview = true;
char status = 'V';

bool test = false;

if ((inReivew && status != 'M') || !inReview)
{
    test = true;
}
它进入if,调试器显示“test”的值为true

如果我这样做的话,还有一件很奇怪的事:

bool test = (inReview && status != 'M') || !inReview;
bool test2 = (inReview && status != 'M') || !inReview;
使用调试器单步执行-test起初为false,test2立即变为true,但当我检查test时,它现在为true

此外,如果我尝试:

bool test = (inReview && status != 'M') || !inReview;
if (test)
{
    string s = "WTF?";
}

单步执行-test最初为false,然后它进入if,现在值为true

当调试器跨入一行时,仍需对该行进行求值。您必须跨过该行才能执行分配。一旦调试器位于结束括号(
}
)处,就应该设置变量的值。

当调试器进入一行时,仍然必须计算该行。您必须跨过该行才能执行分配。调试器位于结束括号(
}
)后,应设置变量的值。

在调试器中的哪一行进行计算?如果您只是在执行赋值的行上设置断点,那么该值最初当然会为false,因为该行的代码尚未执行。转到下一行,您应该会看到正确的结果。

您在调试器中计算的是哪一行?如果您只是在执行赋值的行上设置断点,那么该值最初当然会为false,因为该行的代码尚未执行。转到下一行,您应该会看到正确的结果。

最后一行非常可疑。
test
在该行上设置之前或之后是否为false?bool test=(在查看和状态中='M')| |!回顾;如果返回true,则不要在调试器上通过语句控制台打印test.Write(test.ToString());在
bool测试
行之后设置断点!最后一个很可疑。
test
在该行上设置之前或之后是否为false?bool test=(在查看和状态中='M')| |!回顾;如果返回true,则不要在调试器上通过语句控制台打印test.Write(test.ToString());在
bool测试
行之后设置断点!是-我跨过该行,该值保持为false。奇怪的是,如果我执行System.Diagnostics.Debug.Write(test.ToString());它打印true,现在调试器将该值显示为trueYes-我跨过该行,该值保持为false。奇怪的是,如果我执行System.Diagnostics.Debug.Write(test.ToString());它打印true,现在调试器将该值显示为trueYes-I步进到嵌套行,该值保持为false。我认为调试器有点奇怪,因为如果值为true,那么它的行为是正确的是-我跳到嵌套行,值保持为false。我认为调试器有点奇怪,因为如果它是真的,那么值的行为就是这样的