bool未在c#中设置为true

时间:2012-11-24 16:29:23

标签: c#

我无法理解这个简单的问题。

我有一个bool,我赞成测试的输出:

// 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”的值显示为false。

当我尝试这个时:

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;

逐步调试 - 首先测试是假的,test2立即变为真,但是当我检查测试时它现在是真的了吗?

另外,如果我尝试:

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

单步执行 - 首先测试是假的,然后它会进入if并且值现在是真的!?

2 个答案:

答案 0 :(得分:3)

当调试器进入一行时,仍然必须评估该行。您必须越过该行才能进行分配。一旦调试器处于结束括号(}),就应该设置变量的值。

答案 1 :(得分:0)

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