在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#中使用,因为泛型的处理方式不同。
谢谢。