在下面的代码中,在Select()之后是否需要使用ToList():
var names = someStorage.GetItems().Select(x => x.Name).ToList();发布于 2013-12-19 15:12:06
Enumerable.ToList方法会导致数据填充,如果你不调用,数据将不会被获取,它将是一个查询。
ToList(IEnumerable)方法强制立即计算查询,并返回包含查询结果的列表。您可以将此方法附加到查询中,以获得查询结果的缓存副本MSDN.
发布于 2013-12-19 15:21:16
这完全取决于您的代码随后会做什么。ToList()方法使您使用Select()定义的查询立即针对数据存储区运行。如果没有它,它的执行将延迟到您第一次访问names变量。
另一个方面是,如果不使用ToList(),那么每次使用names变量时都会对数据存储运行查询,而不是像ToList()那样只运行一次。因此,这也在很大程度上取决于您使用names变量的频率(如果您只使用一次(例如,在循环中),则没有区别,否则ToList()会更有效。
发布于 2013-12-19 15:12:58
这取决于你的赋值变量,如果你赋值给list,那么你需要进行转换。
如果不调用ToList,它将是一个作为枚举数的IEnumerable<TSource>,它支持对指定类型的集合进行简单迭代。
ToList将源序列转换为列表。需要注意的几点:
最后两点值得进一步讨论。首先,针对ICollection的优化没有文档记录,但它很有意义:
中新创建的数组中
Source to refer
https://stackoverflow.com/questions/20675469
复制相似问题