当我使用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语句将获得枚举数一次还是使用第一种方法在每个循环中获取它?
答案 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