我总是假设如果我Select(x=> ...)在LINQ对象的上下文中使用,那么新的集合将立即创建并保持静态.我不太清楚为什么我这么想,这是一个非常糟糕的假设,但我做到了.我经常.ToList()在其他地方使用,但在这种情况下通常不会.
此代码演示即使是简单的"选择"也会延迟执行:
var random = new Random();
var animals = new[] { "cat", "dog", "mouse" };
var randomNumberOfAnimals = animals.Select(x => Math.Floor(random.NextDouble() * 100) + " " + x + "s");
foreach (var i in randomNumberOfAnimals)
{
testContextInstance.WriteLine("There are " + i);
}
foreach (var i in randomNumberOfAnimals)
{
testContextInstance.WriteLine("And now, there are " + i);
}
Run Code Online (Sandbox Code Playgroud)
这将输出以下内容(每次迭代集合时都会调用随机函数):
There are 75 cats
There are 28 dogs
There are 62 mouses
And now, there are 78 …Run Code Online (Sandbox Code Playgroud)