是否需要在此代码中的Select()之后使用ToList():
var names = someStorage.GetItems().Select(x => x.Name).ToList();
答案 0 :(得分:6)
Enumerable.ToList方法会导致数据填充,如果你不调用数据,那么它将是一个查询。
ToList(IEnumerable)方法强制立即执行 查询评估并返回包含查询的List 结果。您可以将此方法附加到查询中以获取 缓存的查询结果副本MSDN。
答案 1 :(得分:2)
这完全取决于您的代码随后执行的操作。 ToList()
方法会导致您使用Select()
定义的查询立即针对数据存储区运行。没有它,它的执行将被延迟,直到你第一次访问names
变量。
另一方面是,如果您不使用ToList()
,则每次使用names
变量时都会针对数据存储区运行查询 - 而不仅仅是ToList()
变量的情况。 {1}}。所以它也在很大程度上取决于你使用names
变量的频率(如果你只使用它一次(例如在循环中),那么没有区别,否则ToList()
会更有效。
答案 2 :(得分:1)
如果您分配到列表,那么这取决于您的赋值变量,那么您需要转换。
如果你不调用ToList,它将是IEnumerable<TSource>
,它是枚举器,它支持对指定类型的集合进行简单迭代。
ToList将源序列转换为列表。有些要点需要注意:
最后两点值得多讨论。首先,没有记录ICollection的优化,但它很有意义: