[解決済み】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>()
は、例えば新しい空のコレクションや配列を返すよりも効率的であると考えられます。
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] C#でジェネリックメソッドからNULLを返すにはどうしたらいいですか?
-
[解決済み] C# Setコレクション?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] JavaでNullと空のコレクションを検証するためのベストプラクティス
-
[解決済み】関数はnullまたは空のオブジェクトを返すべきですか?
-
[解決済み] Collections.emptyMap() vs new HashMap()