1. ホーム
  2. c#

[解決済み】nullと空のコレクションのどちらを返すのが良いですか?

2022-03-24 11:58:06

質問

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

どのように解決するのですか?

コレクションが空である。 常にです。

これは最悪だ。

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

を返さないのがベストプラクティスとされています。 null コレクションまたは列挙可能なものを返すとき。 常に は空の列挙体/コレクションを返します。 これにより、前述のような無意味なことを防ぐことができますし、あなたの車が同僚やあなたのクラスのユーザーから卵を投げつけられるのを防ぐことができます。

プロパティの話をするときは、必ずプロパティを一度設定したら忘れること

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>() は、例えば新しい空のコレクションや配列を返すよりも効率的であると考えられます。