このコードが終了したときの結果はmyObject
?
object myObject = "something";
object yourObject = null;
myObject = null ?? yourObject;
このコードが終了したときの結果はmyObject
?
object myObject = "something";
object yourObject = null;
myObject = null ?? yourObject;
myObject は null になります
これは次のように翻訳されます -
if (null == null)
myObject = yourObject;
else
myObject = null;
キックのためだけに、ここに小さなテーブルがあります:
A ?? B-> R --------------------- ?? 任意->a; ここで、aはnullではありません ヌル ??b-> b; 任意のb ヌル ??null-> null; 以前から暗示
そして、これ??
は(驚きです!)右に関連付けられた中置演算子なので、x ?? y ?? z
-> x ?? (y ?? z)
。とのよう&&
に||
、??
も短絡動作です。
...から?? 演算子(C#リファレンス):
nullでない場合は、左側のオペランドを返します(??)。それ以外の場合は、右のオペランドを返します。
... C#3.0言語リファレンスから:
フォームのnull合体式?? bは、aがnull許容型または参照型である必要があります。aがnull以外の場合、??の結果 bはaです。それ以外の場合、結果はbです。この操作は、aがnullの場合にのみbを評価します。
合体演算子は次のように変換されます。
x ?? y
x != null ? x : y
したがって、あなたが持っているもの:
myObject = null != null ? null : yourObject;
null は常に null になるため、これは実際にはかなり無意味です。