以下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);
}
Run Code Online (Sandbox Code Playgroud)
输出: 2, 4, 6, 8
为什么不2, 4, 6呢?
Ati*_*MVP 235
输出是2,4,6,8因为延迟执行.
查询变量在迭代时实际执行,而不是在创建查询变量时执行.这称为延迟执行.
- Suprotim Agarwal,"推迟与LINQ中的即时查询执行"
还有另一个称为立即查询执行的执行,它对缓存查询结果很有用.来自Suprotim Agarwal:
要强制立即执行不产生单例值的查询,可以 在查询或查询变量上调用
ToList(), ToDictionary(), ToArray(), Count(), Average()orMax()方法.这些称为转换运算符,允许您创建结果的副本/快照,并且可以多次访问,而无需重新执行查询.
如果您想要输出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);
}
Run Code Online (Sandbox Code Playgroud)
San*_*han 11
这是因为延迟执行,这意味着表达式的计算在某个地方需要之前不会执行.如果数据太大,这会使性能更好.
| 归档时间: |
|
| 查看次数: |
4353 次 |
| 最近记录: |