次のコードがあります。
decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
a
との両方b
が入力されているので、 4c
の結果が得られることを期待しています。
ただし、得られる結果は2であり、その場合は2ではなく1b
と見なされます。
この動作の背後にある理由を知っている人はいますか?
次のコードがあります。
decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
a
との両方b
が入力されているので、 4c
の結果が得られることを期待しています。
ただし、得られる結果は2であり、その場合は2ではなく1b
と見なされます。
この動作の背後にある理由を知っている人はいますか?
の値を取得する場合は、値の条件をグループ化します4
decimal c = (a ?? 1m) * (b ?? 1m);
現在の構文は次のように評価されます
decimal c = a ?? (1m * b ?? 1m);
2
および(についてはa
)の値を取得する理由
式は次のように機能します。
decimal c = a ?? (1m * b) ?? 1m;
値があるのでa
、それを取得します。
decimal c = a ?? 1m * b ?? 1m;
以下に等しい:
if (a != null)
c = a
else
...
あなたの場合a
はnullではなく、値がある2
ため、これが結果です。