任何人都可以让我知道为什么它发生在LINQ?

时间:2013-09-25 03:33:46

标签: c# linq

我有以下代码:

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);
 }

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

enter image description here

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

2 个答案:

答案 0 :(得分:2)

使用lowNums

迭代foreach时会评估LINQ查询

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

它就像一条传送带,只按要求滚动元素 ..

答案 1 :(得分:2)

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

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

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