C#2.0 では、Nullable 型や、ruby の yield にかなり近いものが導入されて、便利そうな感じである。
ちょっと面白いのは、小ネタの??演算子。
int a = foo() ?? bar() ?? 0 ; // foo() と bar() は、int(のようなもの) か null を返すメソッド
と書くと、
int a = foo()==null ? foo() : bar==null() ? bar : 0;
のようなこと(?? を使った方は、foo() や bar() が二回呼ばれる可能性がないという点が異なる)になるらしい。
ruby にもあればいいのにと一瞬思ったが、ruby では
a = foo || bar || 0
と書けばいいのであった。
foo が false を返したときの動作が、C#2.0 の ?? とは異なる(?? は、!=null で判断しているらしい)が、それしか違いがない。
ちなみに。
試してみたら、foo() が 非null なら
int a = foo() ?? bar() ?? 0;
で、bar() は呼ばれない。ちゃんとしている。