【发布时间】:2014-11-12 13:06:10
【问题描述】:
我希望 Enumerable.Empty() 的实现是这样的:
public static IEnumerable<TResult> Empty<TResult>()
{
yield break;
}
但实现是这样的:
public static IEnumerable<TResult> Empty<TResult>()
{
return EmptyEnumerable<TResult>.Instance;
}
internal class EmptyEnumerable<TElement>
{
private static volatile TElement[] instance;
public static IEnumerable<TElement> Instance
{
get
{
if (EmptyEnumerable<TElement>.instance == null)
EmptyEnumerable<TElement>.instance = new TElement[0];
return (IEnumerable<TElement>)EmptyEnumerable<TElement>.instance;
}
}
}
为什么实现比一行代码更复杂?返回缓存数组而不(yield)不返回任何元素是否有优势?
注意:我永远不会依赖方法的实现细节,但我只是好奇。
【问题讨论】:
-
yield break是 C# 中的一行代码,但如果您查看生成的 IL 代码,它会复杂得多。
标签: c# linq linq-to-objects