在ToDictionary之前做ToList()会更好吗?

时间:2017-05-12 10:25:08

标签: c# .net performance linq

在执行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));
}

2 个答案:

答案 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}}两次。