20

C#では、私が書くと

int? x = null;
x += x ?? 1

これは次と同等であると思います。

int? x = null;
x = x + x ?? 1

したがって、最初の例では、2番目の例のようにxが含ま1れます。しかし、そうではなく、nullが含まれています。+ =演算子は、割り当てられていない場合、null許容型では機能しないようです。なぜこれが当てはまるのですか?

編集:指摘したように、それはnull + 1 = null演算子の優先順位のためです。私の弁護では、MSDNのこの行はあいまいだと思います!:

事前定義された単項演算子と二項演算子、および値型に存在するユーザー定義演算子は、null許容型でも使用できます。これらの演算子は、 [いずれかの]オペランドがnullの場合、null値を生成します。それ以外の場合、オペレーターは含まれている値を使用して結果を計算します。

4

1 に答える 1

32

2つのステートメントの違いは次のとおりです。

x += x ?? 1
x = (x + x) ?? 1

2番目はあなたが期待していたものではありません。

両方の内訳は次のとおりです。

x += x ?? 1
x += null ?? 1
x += 1
x = x + 1
x = null + 1
x = null

x = x + x ?? 1
x = null + null ?? 1
x = null ?? 1
x = 1
于 2012-10-03T15:41:11.083 に答える