哪个更好,Enumerable.Empty <t>或new [0]?</t>

时间:2011-03-16 01:11:04

标签: c#

这些是相同的:

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

那么,使用哪个?

我认为第一个更清楚地传达意图,但它更大,更有噪音,更不用说调试器中的丑陋了。如果我正在阅读Reflector,那么第二个在内存和CPU方面也更有效率。

我倾向于new type[0],但想知道你们的想法。

3 个答案:

答案 0 :(得分:22)

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

我倾向于Enumerable.Empty<T>,因为它更清楚地显示了程序员的意图,而且因为内存使用而使用显式数组创建是托管程序中的过早优化,因为运行时几乎总是如此无论如何都要为进程分配超过必要的内存。

答案 1 :(得分:8)

在这种情况下,性能/内存使用方面的差异令人难以置信,因此这不是我的决定因素。

我个人会使用Enumerable.Empty,主要是因为它非常清楚地描述了开发者的意图。

答案 2 :(得分:5)

它看起来像Enumerable.Empty委托给EmptyEnumerable,它返回一个长度为0的数组。但它每次返回相同的数组,并使该空数组永远保持活着。