在C#中我使用LINQ和IEnumerable很好。 一切都很好(或者至less大部分如此)。 但是,在很多情况下,我发现自己需要一个空的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 现在,虽然上述对我来说是完全正确的 – 也就是说,如果创build数组对象有任何“额外的开销”,我只是不在乎 – 我想知道: C#/。NET中是否存在“空不变的IEnumerable / IList”单例? (即使不是,有没有更好的办法来处理上述情况?) Java具有Collections.EMPTY_LIST不可变单例 – 通过Collections.emptyList<T>() “well-typed” – […]
在实践中,最好是返回一个像这样的空列表: return Collections.emptyList(); 或者像这样 : return new ArrayList<Foo>(); 或者这是完全依赖于你将要做什么与返回列表?