下面的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);
 }

.net相关问答推荐

如何在PowerShell中隐藏任务延迟输出?

从窗体中移除另一个控件中引用的控件时获取设计时通知

在数据网格中:如何在更改单元格 A 中的值后显示单元格 B 中的更改

如何使用 awslocal 通过 localstack 中的 cloudwatch events/eventbridge 触发 lambda

线程安全性的单元测试?

"投掷;" 是什么意思?靠自己做什么?

即时窗口中的动态导致Microsoft.CSharp.RuntimeBinder.Binder未定义或导入错误

为什么不能使用 null 作为 Dictionary 的键?

在 C# 中生成随机小数

maxRequestLength 的最大值?

静态代码块

如何判断一个类型是否是简单类型?即持有一个单一的价值

C# 的 Actors 有什么好的实现吗?

什么是 C# 中的自动属性,它们的用途是什么?

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

ToLowerInvariant() 有什么问题?

带有嵌套控件的设计模式

在 C# 中转义无效的 XML 字符

Uri.Host 和 Uri.Authority 有什么区别

在类型 c# 上切换大小写