4

次のコードがあります。

decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;

aとの両方bが入力されているので、 4cの結果が得られることを期待しています。

ただし、得られる結果は2であり、その場合は2ではなく1bと見なされます。

この動作の背後にある理由を知っている人はいますか?

4

3 に答える 3

5

の値を取得する場合は、値の条件をグループ化します4

decimal c = (a ?? 1m) * (b ?? 1m);

現在の構文は次のように評価されます

decimal c = a ?? (1m * b ?? 1m);

2および(についてはa)の値を取得する理由

于 2012-09-28T02:03:06.823 に答える
4

式は次のように機能します。

decimal c = a ?? (1m * b) ?? 1m;

値があるのでa、それを取得します。

于 2012-09-28T02:03:44.013 に答える
3
decimal c = a ?? 1m * b ?? 1m;

以下に等しい:

if (a != null)
    c = a
else
    ...

あなたの場合aはnullではなく、値がある2ため、これが結果です。

于 2012-09-28T02:03:31.417 に答える