Лямбда-выражение: внутри или снаружи оператора foreach? - PullRequest
0 голосов
/ 29 января 2019

Меня интересует эффективность, когда я кодирую с помощью лямбда-выражения, представьте себе такой случай:

Первый способ

foreach (Section section in formAssigned.Sections.Where(x => !x.Deleted))
{
//code
}

Второй способ

var list = formAssigned.Sections.Where(x => !x.Deleted)
foreach (Section section in list)
{
//code
}

Мой вопрос таков: оператор foreach получит перечислитель один раз или получит его в каждом цикле первым способом?

1 Ответ

0 голосов
/ 29 января 2019

Ну, грубо говоря, цикл foreach получает объект перечислителя и выполняет итерацию коллекции, используя метод MoveNext.

Так что думайте об этом, как будто у вас есть такой код:

var enumerator = formAssigned.Sections.Where(x => !x.Deleted).GetEnumerator();
// some code with enumerator (this is what you have in body of foreach loop)

А

var query = formAssigned.Sections.Where(x => !x.Deleted); // returns IEnumerable<T>
var enumerator = query.GetEnumerator();
// some code with enumerator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...