我有以下代码:
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表达式。我只显示以前计算的结果。谁能解释一下呢?
答案 0 :(得分:2)
使用lowNums
foreach
时会评估LINQ查询
LINQ查询提供延迟执行,并且它们没有自己的支持结构来存储元素..
它就像一条传送带,只按要求滚动元素 ..
答案 1 :(得分:2)
您正在正在运行 LINQ表达式,而您正在创建它。表达式在需要时执行,通常称为延迟执行。
当进入该代码时,您可以看到lowNums
实际上是System.Linq.Enumerable.WhereListIterator<int>
类型,这是一个表达式,而不是结果。
通过循环表达式,重新计算结果。如果要显式执行表达式并将结果存储在表达式上,请使用.ToList()
。