Являются ли эти перечисления функционально одинаковыми? - PullRequest
2 голосов
/ 10 февраля 2011
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?

Также будет ли разница в производительности

Ответы [ 2 ]

2 голосов
/ 10 февраля 2011

Это определенно функционально идентично (хотя я предположил, что отсутствие ключевого слова new в вашем примере LINQ было опечаткой).

В Select есть немного проверки нуля, но это вряд ли существенно повлияет на производительность.

Джон Скит написал в своем блоге хорошую статью здесь: http://msmvps.com/blogs/jon_skeet/archive/2010/12/23/reimplementing-linq-to-objects-part-3-quot-select-quot-and-a-rename.aspx

1 голос
/ 10 февраля 2011

Оба кода вернут одинаковые результаты.Оба имеют отложенное выполнение (т.е. на самом деле ничего не будет выполнено до тех пор, пока вы не начнете перечислять результат) и передадут результаты в поток (то есть не буферизуют).Между двумя версиями не должно быть значительной разницы в производительности

...