C#にはハテナの記号が二つ並んだ「??」という演算子がある。
これは、null合体演算子(null-coalesching operator)というそうだ。
この演算子を使うと、参照型やnull許容型の変数に代入するときにnullチェックをしているようなケースを簡潔に書くことができる。
例えば以下のようなプログラムを見てみよう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace NullCoalescingOperatorLesson
{
class Program
{
static void Main(string[] args)
{
string hoge = null;
string foo = hoge ?? "Hello!!";
// "Hello!!"と表示
Console.WriteLine(foo);
hoge = "World!!";
foo = hoge ?? "ABC";
// "World!!"と表示
Console.WriteLine(foo);
}
}
}
14行目と20行目でnull合体演算子を使用している。
実行結果を見ると分かるとおり、左辺の値がnullでないときは左辺の値、nullの時は右辺の値が演算子の結果となる。
同じようなことをするのに3項演算子を使って
string foo = hoge != null ? hoge : "Hello!!";
のように書くよりもすっきりと書けるだろう。
その他にも、プロパティの呼び出しがあったときに初めてインスタンスを生成するようなケースにも使える。
プログラム例は以下のような感じである。
class MyClass
{
// 重いクラス。必要なとき意外はインスタンスを生成したくない。
private HeavyClass heavy;
public HeavyClass Heavy
{
// 呼び出しがあったときに初めて生成する
get { return heavy ?? (heavy = new HeavyClass()); }
}
}
この演算子はC#2.0から使えるようになっていたようであるが、
何気に知らなかった・・・。
[参考]
http://msdn.microsoft.com/ja-jp/library/ms173224.aspx