哪个更好,Enumerable.Empty<T> 还是 new[0]?

18

这两个是相同的:

IEnumerable<string> i;
i = Enumerable.Empty<string>();
i = new string[0];

那么,应该用哪个?

我认为第一个更清晰地传达了意图,但它更大、有点嘈杂,更不用说在调试器中很丑陋。如果我正确理解了反编译器,第二种方法在内存和 CPU 方面也更有效率。

我倾向于使用 new type[0],但想知道你们都怎么想。

3个回答

28

Enumerable.Empty<T> 缓存了空数组的创建,因此每次调用将始终返回相同的数组,而第二条语句则会在每次调用时创建新的数组。

我倾向于使用 Enumerable.Empty<T>,因为它更清晰地展示了程序员的意图,并且因为在托管程序中使用明确的数组创建是对内存使用的过度优化,由于运行时几乎总会为进程分配比必要的内存更多。


8
在这种情况下,性能/内存使用方面的差异非常微不足道,因此这不会是我的决定因素。我个人会使用Enumerable.Empty,主要是因为它非常清楚地描述了开发人员的意图。

5

在我看来,Enumerable.Empty 委托给 EmptyEnumerable,后者返回长度为0的数组。但是它每次都返回相同的数组,并永远保持该空数组存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接