这些是相同的:
IEnumerable<string> i;
i = Enumerable.Empty<string>();
i = new string[0];
那么,使用哪个?
我认为第一个更清楚地传达意图,但它更大,更有噪音,更不用说调试器中的丑陋了。如果我正在阅读Reflector,那么第二个在内存和CPU方面也更有效率。
我倾向于new type[0]
,但想知道你们的想法。
答案 0 :(得分:22)
Enumerable.Empty<T>
缓存空数组的创建,因此将始终返回相同的数组,而第二个语句会在每次调用时创建一个新数组。
我倾向于Enumerable.Empty<T>
,因为它更清楚地显示了程序员的意图,而且因为内存使用而使用显式数组创建是托管程序中的过早优化,因为运行时几乎总是如此无论如何都要为进程分配超过必要的内存。
答案 1 :(得分:8)
在这种情况下,性能/内存使用方面的差异令人难以置信,因此这不是我的决定因素。
我个人会使用Enumerable.Empty
,主要是因为它非常清楚地描述了开发者的意图。
答案 2 :(得分:5)
它看起来像Enumerable.Empty
委托给EmptyEnumerable
,它返回一个长度为0的数组。但它每次返回相同的数组,并使该空数组永远保持活着。