0

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

我有一个布尔值,我将其分配给测试的输出:

// 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 是假的,test2 立即变为真,但是当我检查 test 时,它现在是真的!?

另外,如果我尝试:

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

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

4

2 回答 2

3

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

于 2012-11-24T16:33:31.043 回答
0

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

于 2012-11-24T16:34:56.470 回答