나는 것으로 Enumerable.Empty()의 구현을 기대 그냥이 :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)?
참고 : 메서드의 구현 세부 정보는 절대로 사용하지 않지만 궁금합니다.
'수율 break'는 C#에서 한 줄,하지만 당신이 보는 경우가 훨씬 더 복잡하다 생성 된 일리노이 코드에서. – Dirk