相关疑难解决方法(0)

65
推荐指数
1
解决办法
7万
查看次数

如何判断IEnumerable <T>是否会延迟执行?

我总是假设如果我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)

c# linq linq-to-entities

28
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

closures ×1

linq ×1

linq-to-entities ×1