2011-02-10 6 views
2
foreach (Effect effect in this.Effects.Where (e => e.IsTransparentEffect && e.HasGPUSupport)) 
    yield return new RealtimeEffect<TransparentEffect> (effect); 

이 열거 코드가 기능적으로 동일합니까?

this.Effects.Where (e => e.IsTransparentEffect && e.HasGPUSupport) 
     .Select (e => new RealtimeEffect<TransparentEffect> (e)); 

나는 Select가 # 1에서와 같이 결과를 다르게 수집하려고 시도 할 것이라고 생각합니다.

또한 성능 차이가 있습니까?

답변

1

두 코드 모두 동일한 결과를 반환합니다. 둘 다 지연 실행 (결과를 열거하기 전까지 실제로 실행되지 않습니다)과 결과를 스트리밍 (즉, 버퍼링되지 않음)합니다. 두 버전간에 상당한 성능 차이가 없어야합니다.

2

확실히 기능적으로 동일합니다 (LINQ 예에서 new 키워드가 부족하다는 것이 오타 였다고 가정 했음에도 불구하고).

Select에는 약간의 null 확인이 있지만 성능에 큰 영향을 미치지는 않습니다. http://msmvps.com/blogs/jon_skeet/archive/2010/12/23/reimplementing-linq-to-objects-part-3-quot-select-quot-and-a-rename.aspx

+0

덕분에 새로운 키워드를 추가 :

존 소총 여기에 자신의 블로그에 좋은 작성자가 있습니다. –