我很好奇执行时,特别是在更新数据和第二次调用时.是否在使用查询变量时,例如在foreach语句中?或者,当我更新列表时,例如nums [1] = 99?
int[] nums = { 1, -2, 3, 0, -4, 5 };
var posNums = from n in nums
where n > 0
select n;
foreach (int i in posNums)
Console.Write("" + i + " ");
Console.WriteLine();
nums[1] = 99;
foreach (int i in posNums)
Console.Write("" + i + " ");
Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)
Linq推迟分析,直到迭代序列,通过Foreach语句或获取迭代器.请注意,在引擎盖下,.ToArray()和.ToList调用执行这样的迭代.你可以通过使用方法调用版本并按F9断点传入的lambda来看到这一点.
var posNums = nums
.Where(n => n > 0);
Run Code Online (Sandbox Code Playgroud)
请注意,因为Linq函数创建枚举器,所以每次迭代序列时它们也会重新评估所有查询函数,因此如果要执行多个(或嵌套),使用.ToArray()将集合复制到内存通常是有利的. !)迭代查询结果.如果要对更改的数据源执行多次迭代,则需要重用相同的Linq结果.
如果您很好奇,还可以在参考源中查看.NET框架用于各种Linq语句的源代码
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |