4

C#で3値演算子とnull合体演算子を試しているときに、式の右側で割り当てを使用できることを発見しました。たとえば、これは有効なC#コードです。

int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);

不思議なことに、式の右側の割り当てはそれ自体の右側に評価されるだけでなく(つまり、ここの3行目はの12ようなものではなく評価されますb = 12 => void)、この割り当ても効果的に機能します。 1つのステートメントで2つの変数が割り当てられます。この代入の右側にある計算可能な式を、使用可能な変数とともに使用することもできます。

この振る舞いは私には非常に奇妙に思えます。 常に評価されるC++での比較ではif (a = 2) なく、問題が発生したことを覚えています。これは、Basic/HaskellからC++に切り替えた後のよくある間違いです。if (a == 2)true

文書化された機能ですか?名前はありますか?

4

2 に答える 2

10

これは、代入演算子も値を返す結果として発生します。

代入演算子 (=) は、右側のオペランドの値を、左側のオペランドが示す格納場所、プロパティ、またはインデクサーに格納し、その値を結果として返します。

この式b = 12は に 12 を代入するだけbでなく、この値も返します。

于 2011-12-05T13:21:49.683 に答える
1

複数の代入は C# で機能します。

int a;
int b;
int c;
a = b = c = 5;
//all variables = 5;

if(6 == (c = 6)){
   //this will be true;
}

方程式の右側に変数を配置すると、同じ行で値自体が割り当てられたばかりであっても、その値/参照が返されます。

于 2011-12-05T13:21:46.357 に答える