开发者

Are these enumerations code functionally the same?

开发者 https://www.devze.com 2023-02-10 03:11 出处:网络
foreach ( Effect effect in this.Effects.Wh开发者_StackOverflow社区ere ( e => e.IsTransparentEffect && e.HasGPUSupport ) )
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

0

精彩评论

暂无评论...
验证码 换一张
取 消