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" の値が 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 になりました!?

4

2 に答える 2

3

デバッガーが行にステップインすると、その行はまだ評価される必要があります。割り当てを行うには、行を超える必要があります。デバッガーが閉じ括弧 ( }) に到達すると、変数の値が設定されているはずです。

于 2012-11-24T16:33:31.043 に答える
0

デバッガーで評価している行は何ですか? 割り当てを行っている行に単にブレークポイントを設定すると、その行のコードがまだ実行されていないため、値は最初は false になります。次の行に進むと、正しい結果が表示されます。

于 2012-11-24T16:34:56.470 に答える