所以我想知道的是,在我的 foreach
循环中使用 LINQ where
子句是否意味着在每次迭代时它都会重新评估我的 LINQ where
子句。例如:
var MyId = 1;
foreach (var thing in ListOfThings.Where(x => x.ID == MyId))
{
//do Something
}
还是这样写更好:
var MyId = 1;
var myList = ListOfThings.Where(x => x.ID == MyId);
foreach (var thing in myList)
{
//do Something
}
还是它们的工作方式完全相同?
最佳答案
foreach (var thing in myExpression)
调用 myExpression.GetEnumerator
和 MoveNext
直到它返回 false。所以你的两个片段是一样的。
(顺便说一下,GetEnumerator
是IEnumerable
上的一个方法,但是myExpression
不一定是IEnumerable
; 只是一个带有 GetEnumerator
方法的东西)。
关于c# - 是否在 foreach 中使用 LINQ 语句重新评估每次迭代的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457948/