我无法理解这个简单的问题。
我有一个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并且值现在是真的!?
答案 0 :(得分:3)
当调试器进入一行时,仍然必须评估该行。您必须越过该行才能进行分配。一旦调试器处于结束括号(}
),就应该设置变量的值。
答案 1 :(得分:0)
您在调试器中评估的是哪一行?如果只是在执行赋值的行上设置断点,那么该值最初将为false,因为该行的代码尚未执行。转到下一行,您应该看到正确的结果。