2011-02-10 2 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)); 

я как-то думаю, что выбрать будет пытаться собрать результаты иначе, чем просто давая это как в # 1?

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

ответ

1

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

2

Это определенно функционально идентично (хотя я предположил, что отсутствие ключевого слова 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

+0

Благодаря добавленным новое ключевое слово. –

Смежные вопросы