null または空のコレクションを返す方が良いですか? 質問する

null または空のコレクションを返す方が良いですか? 質問する

これは一般的な質問ですが (ただし、私は C# を使用しています)、最善の方法 (ベスト プラクティス) は何ですか。戻り値の型としてコレクションを持つメソッドに対して、null または空のコレクションを返しますか。

ベストアンサー1

空のコレクション。常に。

これは最悪だ:

if(myInstance.CollectionProperty != null)
{
  foreach(var item in myInstance.CollectionProperty)
    /* arrgh */
}

nullコレクションまたは列挙可能オブジェクトを返すときは、決してreturn しないことがベストプラクティスとされています。常に空の列挙可能オブジェクト/コレクションを返します。これにより、前述のナンセンスが防止され、同僚やクラスのユーザーから車に卵を投げつけられることもなくなります。

プロパティについて話すときは、プロパティを一度設定したら忘れてください。

public List<Foo> Foos {public get; private set;}

public Bar() { Foos = new List<Foo>(); }

.NET 4.6.1 では、これをかなり凝縮できます。

public List<Foo> Foos { get; } = new List<Foo>();

列挙可能値を返すメソッドについて言えば、代わりに空の列挙可能値を簡単に返すことができますnull...

public IEnumerable<Foo> GetMyFoos()
{
  return InnerGetFoos() ?? Enumerable.Empty<Foo>();
}

使用Enumerable.Empty<T>()たとえば、新しい空のコレクションや配列を返すよりも効率的であると考えられます。

おすすめ記事