foreach ( Effect effect in this.Effects.Where ( e => e.IsTransparentEffect && e.HasGPUSupport ) )
yield return new RealtimeEffect<TransparentEffect> ( effect );
VS
this.Effects.Where ( e => e.IsTransparentEffect && e.HasGPUSupport )
.Select ( e => new RealtimeEffect<TransparentEffect> ( e ) );
我不知何故认为Select会尝试收集结果而不仅仅是像#1那样产生它?
还会有任何性能差异吗?
答案 0 :(得分:2)
它在功能上绝对相同(尽管我假设您的LINQ示例中缺少new
关键字是一个错字。)
Select中有一些空值检查,但这不太可能显着影响性能。
Jon Skeet在他的博客上写了一篇很好的文章:http://msmvps.com/blogs/jon_skeet/archive/2010/12/23/reimplementing-linq-to-objects-part-3-quot-select-quot-and-a-rename.aspx
答案 1 :(得分:1)
两个代码都会返回相同的结果。两者都有延迟执行(即在你开始枚举结果之前什么都不会执行)并流式传输结果(即没有缓冲)。两个版本之间不应存在显着的性能差异