1. ホーム
  2. c#

[解決済み] C#で "Empty List "シングルトンは存在するか?

2023-04-17 08:52:44

質問

C#では、LINQとIEnumerableをよく使っています。そして、すべてがうまくいっています (または、少なくともほとんどそうです)。

しかし、多くの場合、私は空の IEnumerable<X> をデフォルトとして使用する必要があります。つまり、私は

for (var x in xs) { ... }

を使えば、NULLチェックをしなくても動作します。現在、私が大きな文脈に応じて行っているのは、このようなことです。

var xs = f() ?? new X[0];              // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... }  // inline, sometimes

さて、上記は 私にとっては全く問題ありません -- つまり、配列オブジェクトを作成する際に余分なオーバーヘッドがある場合、私は 気にしない

私は不思議に思っていました。

C#/.NET のシングルトンには "空の immutable IEnumerable/IList" がありますか? (また、ないとしても、上記のようなケースを処理する "better" があるでしょうか?)

Java には Collections.EMPTY_LIST 不変のシングルトン -- "well-typed" via Collections.emptyList<T>() -- はこの目的に適っていますが、ジェネリックの扱いが異なるため、同様のコンセプトが C# で機能するかどうかさえわかりません。

ありがとうございます。

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

あなたが探しているのは Enumerable.Empty<T>() .

他のニュースとして、Java の空リストは、リストインターフェイスが例外を投げるリストに要素を追加するためのメソッドを公開しているため、最悪です。