我遇到了一个奇怪的问题.我在这里重现了这个问题.
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
Run Code Online (Sandbox Code Playgroud)
到目前为止,我认为Linq函数在被调用时会被执行.但是,在我调用ToListLinq函数后OrderBy再次执行此方法.为什么会这样?
Jer*_*vel 19
你正在看延期执行.当您创建LINQ查询时,它基本上是一个蓝图,表示"在请求时,执行这些步骤来操纵数据源".这里棘手的部分是这个请求只能由一组不同的LINQ操作完成(.ToList()就是其中之一).
因此,当您调用e.ToList()一次它将随机化数据源时,因为这是蓝图所说的必须做的事情.当您.ToList()再次在同一蓝图上调用时,它会从一开始就再次启动并再次随机化.
蓝图不包含任何状态,它只是说明在每一步都应该做什么.