Lambda表达式:foreach语句的内部还是外部?

时间:2019-01-29 16:08:37

标签: c# loops lambda

当我使用lambda表达式编码时,我想知道效率:

第一种方式

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 :(得分:1)

大致来说,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