Enumerable.Emptyを使用する方が良いでしょうか () は新しいリストとは対照的である () を使ってIEnumerableを初期化する ? 質問する

Enumerable.Emptyを使用する方が良いでしょうか () は新しいリストとは対照的である () を使ってIEnumerableを初期化する ? 質問する

Person クラスがあるとします:

public class Person
{
   public string Name { get; set;}
   public IEnumerable<Role> Roles {get; set;}
}

明らかに、コンストラクターで Roles をインスタンス化する必要があります。以前は、次のように List を使用してこれを実行していました。

public Person()
{
   Roles = new List<Role>();
}

System.Linqしかし、名前空間でこの静的メソッドを発見しました

IEnumerable<T> Enumerable.Empty<T>();

からマイクロソフト:

メソッドEmpty(TResult)()は、 型の空のシーケンスをキャッシュしますTResult。返されるオブジェクトが列挙されると、要素は生成されません。

場合によっては、このメソッドは、 を受け取るユーザー定義メソッドに空のシーケンスを渡すのに役立ちますIEnumerable(T)。また、 などのメソッドに中立要素を生成するためにも使用できますUnion。 の使用例については、「例」セクションを参照してください。

では、コンストラクターをそのように記述する方が良いのでしょうか? それを使用していますか? その理由は? そうでない場合は、なぜ使用しないのですか?

public Person()
{
   Roles = Enumerable.Empty<Role>();
}

ベストアンサー1

ほとんどの投稿は要点を見逃していると思います。空の配列や空のリストを使用した場合でも、それらはオブジェクトであり、メモリに保存されます。ガベージ コレクターがそれらを処理する必要があります。高スループットのアプリケーションを扱っている場合、顕著な影響が出る可能性があります。

Enumerable.Empty呼び出しごとにオブジェクトを作成しないため、GC への負荷が軽減されます。

ただし、コードが低スループットの場所にある場合は、最終的には美観上の考慮事項になります。

おすすめ記事