我知道,如果您构造一个 LINQ 查询并将其附加,.ToList()
您将在那里执行该 LINQ 查询,然后返回一个列表对象。但是,如果您不这样做,则会得到一个 IOrderedQueryable 对象,据我所知,该对象尚未排序。
如果我随后将该集合放入 For Each 语句中,此时列表是否已排序?这是否意味着我实质上已经覆盖了该集合的 GetEnumerator 的默认实现?
我知道,如果您构造一个 LINQ 查询并将其附加,.ToList()
您将在那里执行该 LINQ 查询,然后返回一个列表对象。但是,如果您不这样做,则会得到一个 IOrderedQueryable 对象,据我所知,该对象尚未排序。
如果我随后将该集合放入 For Each 语句中,此时列表是否已排序?这是否意味着我实质上已经覆盖了该集合的 GetEnumerator 的默认实现?
您所指的是延迟执行。ToList()
这基本上意味着,只要您不调用ToArray()
LINQ 查询或任何其他将您的 LINQ 查询直接转换为集合的方法,该查询就会在使用分配给它的变量时执行。
直到使用查询时,IEnumerable
都不会枚举 。但是,我认为GetEnumerator
在延迟执行的情况下不会被覆盖。
这是有关此特定主题的 MSDN 博客:http: //blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx