この質問にはすでに答えがあります。
私は名前のリストを返す単純なライブラリを書きます。
しかし、私は何も見つからない場合に何を返すべきですか?
return new List<String>();
または
return null;
例:
var resultColl=FindNames(...);
このコードは他のコンポーネントから使用することができ、私はそれを破損したくありません。 nullを返した場合、確認するのが正しい方法だと思います。しかし、私は空のリストを返す必要がありますか?
ありがとうございました。
あなたはいつも空のリストを返すべきです。を参照してくださいコレクションのためのガイドライン。
コレクションプロパティまたはメソッドからnull値を返さないでください。 コレクションを返す空のコレクションまたは空の配列を返す 代わりに。
null
できるだけ。単なるライブラリで、デフォルトの空の実装をいくつか提供する必要があります。 - zinking
空のリストを返すことはあなたの関数のユーザーにとってより便利です:
foreach (string name in FindNames(...))
{
Display(name);
}
nullを返すと、呼び出し側は追加のコードを書く必要があります。
追加のローカル変数(関数を2回呼び出す必要がないようにするため)
List<string> names = FindNames(...);
if (names != null)
{
foreach (string name in names)
{
Display(name);
}
}
そのため、空のリストを返す方が良いでしょう。
私は戻ってきたいEnumerable.Empty<string>()
メソッドがListを返すことになっている場合は、return new List<string>()
。空のListを返す必要がある状況がたくさんある場合は、毎回返される静的リストを作成することができます。これにより、毎回新しい空のリストを作成する必要がなくなります。@YuvalItzchakov
。
空のコレクションはnull
それは、私の考えでは、よりクリーンなコードにつながるからです。
Enumerable.Empty<string>().ToList();
- Yuval Itzchakovnew List<string>();
- Rob♦IEnumerable<string>
、これはコンパイルしません。彼が使ったようにList<string>
、私は彼が使用しているものだと思いました。 - Yuval ItzchakovList<string>
それが変換される必要があるであろうと期待されているそしてそれからまたそれはEnumerable.Emptyの使用を冗長にするでしょう。 - npintistatic List<string>
性能的にはより良いでしょう。 - Yuval Itzchakov
呼び出し元のコードはリストを反復したい、またはListを使って何かをしたいと思うでしょう。空のListを返すことで、呼び出し元のコードは正常に機能するはずです。 nullを返した場合、呼び出し側のコードは最初にリストを持っていることを確認する必要があります。
それはおそらく単なる好みの問題です、しかし空のリストを返すことは私の投票を得ます...あなたは契約がそれが返すだろうと言ったものを返しています。
それはあなたのコードの意味によって異なります。
結果が受け入れられない場合は、空のコレクションを返す必要があります。
結果が1つもエラー条件でない場合は、nullを返します。
私はあなたが返すものが何もないときあなたがすることに一貫していることを提案するでしょう。このようにして、あなたはいつもあなたが何を求めても同じタイプの反応を何も期待していないと期待していることを知っています。あなたはいつも空のセットや空の文字列、あるいは0などを返すことを知っているようなものです。
あなたが持っている他の図書館アイテムに関してあなたは何をしますか?
より詳細な答えはTuple<bool, List<string>>
。これはあなたの検索に関する他の詳細を含むように修正することができる明確な解決策です:
var thereAreResults = foundList.Count > 0;
return new Tuple<bool, List<String>>(thereAreResults, foundList);
List<T>
まったく空に戻すIList<T>
または、可能であれば空IEnumerable<T>
代わりに。 - Dennis