2010-04-28 2 views

ответ

6

Вы действительно не хотите изменить локальную переменную в теле предиката Where. Функции с такими побочными эффектами - плохая новость; попробуйте представить, что произойдет, если это произойдет (например) из параллельного перечислимого, сгенерированного AsParallel() - у вас будет состояние гонки.

Если вы объясните, что вы пытаетесь выполнить, я уверен, что один из нас мог бы обеспечить лучшее средство для достижения этой цели. Я думаю, что это будет выглядеть примерно так:

int count = myList.Count(x => condition(x)); 
+0

Теперь я использую метод .Count(), но мой список очень большой и по соображениям производительности я не хочу его использовать. –

+1

@Navid: переход к методу, подобному тому, который задан в вопросе, не улучшит ничего, по производительности; независимо от того, последовательность должна быть полностью повторена и каждый элемент оценивается. Единственная причина, по которой эта версия работает быстрее, заключается в том, что 'Where' использует отложенное выполнение и в этом случае никогда не выполняется, потому что вы никогда не повторяете этот список. – Aaronaught

+0

Так что я могу сделать? –

0

Метод Where возвращает IEnumerable<T>, но вы на самом деле не перечисленное его (с Еогеасп, или вручную итерации по полученной IEnumerator<T>).