在执行GroupBy()和ToDictionary()两次之前执行ToList()是否值得,如下例所示。在创建字典时,ToList()可以最大化性能吗?没有ToList(),Resharper正在大肆宣传可能的多重枚举。
public void SomeMethod(IEnumerable<oldItem> oldItems)
{
var collection = oldItems.Select(i => new item()).ToList();
var dict1 = collection.ToDictionary(i => i.Key);
var dict2 = collection
.GroupBy(i => i.FieldA)
.ToDictionary(g => g.Key, g => new Flags(g.ToArray));
}
答案 0 :(得分:1)
Resharper警告您,当您只打算一次时,IEnumerable的下一个项目可能被消耗两次。将项目放在列表中会将IEnumerable消耗到列表中。您可以根据需要多次枚举列表,其中IEnumerable将生成下一个项目。第一次使用可能会消耗collection
,因此第二次使用时行为可能会出乎意料。
答案 1 :(得分:0)
ToList
collection
SelectEnumerator
oldItems
dict1
dict2
i => new item()
oldItems
{{1}} {{1}} {{1}} {{1}}。
这意味着{{1}}的每个元素都会调用{{1}}两次。