在 C# 中,我经常使用 LINQ 和 IEnumerable。一切都很好(或至少大部分如此)。
但是,在许多情况下,我发现自己需要一个空IEnumerable<X>
的作为默认值。也就是说,我想
for (var x in xs) { ... }
无需空检查即可工作。现在这就是我目前所做的,取决于更大的背景:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
现在,虽然上述内容对我来说非常好——也就是说,如果创建数组对象有任何“额外开销”我不在乎——我想知道:
C#/.NET 中是否有“空的不可变 IEnumerable/IList”单例?(而且,即使没有,是否有一种“更好”的方式来处理上述情况?)
Java 有Collections.EMPTY_LIST
不可变的单例——“类型良好的”通过Collections.emptyList<T>()
——它可以达到这个目的,尽管我不确定类似的概念是否甚至可以在 C# 中工作,因为泛型的处理方式不同。
谢谢。