我有以下代码:任何人都可以让我知道为什么它发生在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);
}
这里同时运行此,它给了我这样的输出:
。
但我不知道为什么它显示20,因为我添加20后没有运行LINQ表达式。我只是显示以前计算的结果。任何人都可以解释吗?当你遍历lowNums
使用foreach
LINQ查询提供延迟执行和他们没有自己的背衬结构来存储元素
运行一个LINQ查询返回一个枚举; 'foreach'遍历它。该枚举保持对其输入的引用,并在您使用它时生成输出;一个'foreach'循环每次都会创建一个新的枚举器。 – Ryan
Linq查询在声明时并未实际执行。当你请求输出时,它会被执行,这就是你用'foreach'循环所做的。您的Linq查询会执行两次,换句话说,每个'foreach'都会执行一次。 –