我遇到了一个奇怪的问题。这里我重现了这个问题。
Random r = new Random();
List<int> x = new List<int> {1, 2, 3, 4, 5, 6};
var e = x.OrderBy(i => r.Next());
var list1 = e.ToList();
var list2 = e.ToList();
bool b = list1.SequenceEqual(list2);
Console.WriteLine(b); // prints false
到目前为止,我认为 Linq 函数在调用时就会执行。但是,在这个方法中,我调用后似乎ToList
Linq 函数OrderBy
再次执行。为什么会这样?
您正在考虑延迟执行。当您创建 LINQ 查询时,它基本上是一个蓝图,上面写着“当请求时,执行这些步骤来操作数据源”。这里棘手的部分是该请求仅由一组不同的 LINQ 操作完成(.ToList()
是其中之一)。
所以当你打电话时e.ToList()
一旦它会将数据源随机化,因为这就是蓝图所说的它必须做的事情。当你打电话时.ToList()
再次在同一个蓝图上,它再次从头开始并再次随机化。
蓝图不包含任何状态,它只是说明了每一步应该做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)