foreach ( Effect effect in this.Effects.Wh开发者_StackOverflow社区ere ( 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 ) );
I somehow think the Select would try to gather the results differently than just yielding it like in #1?
Also would there be any performance difference?
It's definitely functionally identical (although I've assumed that the lack of a new
keyword in your LINQ example was a typo).
There's a bit of null checking in Select, but that's unlikely to significantly affect performance.
Jon Skeet has a good writeup on his blog here: http://msmvps.com/blogs/jon_skeet/archive/2010/12/23/reimplementing-linq-to-objects-part-3-quot-select-quot-and-a-rename.aspx
Both codes will return the same results. Both have deferred execution (i.e. nothing will actually be executed until you start enumerating the result) and stream the results (i.e. not buffered). There shouldn't be a significant performance difference between the two versions
精彩评论