Преобразование Запросов Linq в лямбда-выражения?

from item in range where item % 2 ==0 select i ;

дополнительные методы equivelant его.

range.where(item % 2 ==0).select(x=>x).

Я чувствую, что первый способ linq переводит следующий компилятором и если это, так там любая оптимизация компилятором как это range.where(item & 2 == 0) вместо другого?

1
задан Freshblood 10 April 2013 в 04:03
поделиться

1 ответ

Нет, компилятор C# никогда не удалит вызов .Select в конце LINQ-запроса. Причина в том, что компилятор C# не знает, что делает метод .Select, и поэтому не может удалить его в качестве оптимизации.

Компилятор не может иметь таких знаний, потому что он привязывается к Select очень гибко. Он будет рассматривать любой метод экземпляра или расширения с именем Select на целевом типе, который имеет соответствующую сигнатуру. Вы даже можете определить свои собственные методы Select для выполнения пользовательских действий, таких как логирование. Если бы компилятор C# удалил пункт Select в этом случае, он бы сломал этот тип кода.

2
ответ дан 2 September 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: