次のコードがあります。
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ため、これが結果です。