c# - 是否在 foreach 中使用 LINQ 语句重新评估每次迭代的语句

标签 c# linq foreach

所以我想知道的是,在我的 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.GetEnumeratorMoveNext 直到它返回 false。所以你的两个片段是一样的。

(顺便说一下,GetEnumeratorIEnumerable 上的一个方法,但是myExpression 不一定是IEnumerable; 只是一个带有 GetEnumerator 方法的东西)。

关于c# - 是否在 foreach 中使用 LINQ 语句重新评估每次迭代的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457948/

相关文章:

c# - 使用平移和缩放计算正确的光标位置

c# - 这两个 LINQ 查询有什么区别?

C#:foreach 循环中的进度更改事件不知道如何用进度条显示进度

c# - Entity Framework 5 中的 ExecuteStoreCommand 方法在哪里?

c# - Fluent-NHibernate 多对多级联不填充链接表

c# - 字符串中只允许单一类型的标记

python - Foreach 逗号分隔项

c# - foreach 循环与 ForEach 方法 - 区别?

c# - C# 中多泛型列表中的 for 循环最佳实践

C#/Linq 获取相邻的集合