2

我有以下代码:

List<int> nums = new List<int>();
nums.Add(1);
nums.Add(4);
nums.Add(2);
var lowNums = from n in nums
              where n%2==0
              select n;

 Console.WriteLine("Even Numbers before adding 20 :");
 foreach (var x in lowNums)
 {
   Console.WriteLine(x);
 }

 nums.Add(20);
 Console.WriteLine("Even Numbers after adding 20:");
 foreach (var x in lowNums)
 {
   Console.WriteLine(x);
 }

在这里运行它时,它给了我这个输出:

在此处输入图像描述.

但我想知道为什么它显示 20 因为我在添加 20 后没有运行 LINQ 表达式。我只是显示之前计算的结果。谁能解释一下?

4

2 回答 2

2

您不是在运行LINQ 表达式,而是在创建它。表达式在需要时执行,这通常称为延迟执行

当步入该代码时,您可以看到它lowNums实际上System.Linq.Enumerable.WhereListIterator<int>是一种表达式,而不是结果。

通过循环表达式,重新计算结果。如果要显式执行表达式并将结果存储在.ToList()表达式上。

于 2013-09-25T03:41:11.710 回答
2

LINQ 查询在您迭代lowNums使用时进行评估foreach

LINQ 查询提供延迟执行,并且它们没有自己的支持结构来存储元素。

它就像一条传送带,只在需要时滚动元素..

于 2013-09-25T03:37:24.267 回答