下面的LINQ条语句是如何工作的?
以下是我的代码:
var list = new List<int>{1,2,4,5,6};
var even = list.Where(m => m%2 == 0);
list.Add(8);
foreach (var i in even)
{
Console.WriteLine(i);
}
Output: 2, 4, 6, 8
为什么不是2, 4, 6
?
下面的LINQ条语句是如何工作的?
以下是我的代码:
var list = new List<int>{1,2,4,5,6};
var even = list.Where(m => m%2 == 0);
list.Add(8);
foreach (var i in even)
{
Console.WriteLine(i);
}
Output: 2, 4, 6, 8
为什么不是2, 4, 6
?
输出是2,4,6,8
,因为是deferred execution.
当查询变量
--苏普罗蒂姆·阿加瓦尔,"Deferred vs Immediate Query Execution in LINQ"岁
还有另一个名为Immediate Query Execution的执行,用于缓存查询结果.再次来自Suprotim Agarwal:
若要强制立即执行不生成单个值的查询,可以对查询或查询变量调用
ToList(), ToDictionary(), ToArray(), Count(), Average()
或Max()
方法.这些称为转换操作符,允许您复制/快照结果和访问次数,而无需重新执行查询.
如果希望输出为2,4,6
,请使用.ToList()
:
var list = new List<int>{1,2,4,5,6};
var even = list.Where(m => m%2 == 0).ToList();
list.Add(8);
foreach (var i in even)
{
Console.WriteLine(i);
}