LIST の返り値は、null ではなく 空の LISTがいい

yfakariya さんに教えていただいたことを blog 化。
ありがとうございます。

LIST hoge()

このコードの場合、何を返して欲しいか?という問題。

LIST hoge()
{
return null;
}

LIST hoge()
{
return new LIST();
}

なのか?

呼び出し元の if 文で使用する場合、こんな感じ。

if(hoge() == null)
or
if(hoge().Count == 0)

foreach の時にだいぶ使用感が変わる

foreach( var item in (hoge() ?? new LIST() : hoge())
or
foreach( var item in hoge())

まぁ、上は普通ではない書き方。
普通はこのように書いてしまう。

foreach( var item in hoge())

こうすると、ヌルポで落ちます。
なぜなら、中間言語では次のように展開されるから。

for( int i = 0; i < hoge().Count; i++)

そう、hoge().Count のプロパティにアクセスしようとして、
インスタンスがなくて落ちる。

だから、LIST の返り値は、null ではなく 空の LISTがいい。