この単純な問題に頭を悩ませることはできません。
テストの出力に割り当てるブール値があります。
// 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;
デバッガーでステップスルー - 最初のテストは false で、test2 はすぐに true になりますが、test をチェックすると true になりました!?
また、試してみると:
bool test = (inReview && status != 'M') || !inReview;
if (test)
{
string s = "WTF?";
}
ステップ スルー - テストは最初は false で、その後 if にステップ インし、値は true になりました!?