C# ??演算子(Null合体演算子) の紹介
.NET 2.0 で導入されたけど、あんまり有名じゃない気がする。個人的には結構好き。
多分、Nullable な型が出来たから追加されたんだろうなと思う。
どんな演算子かというと、
z = x ?? y; // x が null の場合、y が代入される。
三項演算子でも書けるけど
z = x == null ? x : y;
Nullable な型を使ってる時に良く使ってる。
こんな感じ。
int? hoge; 〜 int hage = hoge ?? 0;
これを別の書き方をすると
int hage = hoge.HasValue ? hoge.Value : 0;か
int hage = hoge.GetValueOrDefault(0);
GetValueOrDefault って長くてメンドクサイので、ついつい ?? 演算子を使ってしまう。
でも、式の途中で使うと不用意に使うとハマってしまう。
CsharpConsole で実際に試してみる。
最後の乗算の部分だけど、演算子の優先順位によって思ってもない結果になってる。
?? 演算子は、代入なので優先順位は低い。MSDN C#の 演算子
そのため、
int y = hoge ?? 0 * 4;
は、まず 0 * 4 が計算されて
int y = hoge ?? 0
になって、結局 y の値は、hoge か hoge が null の場合は、0 になる。
y = (hoge ?? 0) * 4;
は、まず hoge ?? 0 が解決されて、今回の場合 hoge は 3 なので
y = 3 * 4;
になって y は 12 になる。
結構注意が必要!!やっぱり、使わない方がいいのかな?