Is it better to do ToList() before ToDictionary?

.net, c#, linq, performance

Solution

Is it better to do `ToList` before `ToDictionary`?

No, `Enumerable.ToDictionary` enumerates all items anyway so there is no benefit. The opposite is true, you need to fill another collection in a loop for no reason

Is it better to do ToList() before `ToDictionary` if i need multiple dictionaries?

Probably. It depends on the type of the sequence. It could be a database query that takes ages to execute. Without `ToList` you will execute it multiple times. But it could also be a collection or very cheap query. Resharper wants you to think about it.

There's another subtle difference which has nothing to do with performance. If you don't store the sequence in a collection(f.e with `ToList`) you could be in a deferred execution context(f.e. if `oldItems` is a database query). That means whenever you execute this query you will get the current result which could be different to the previous execution's result. That might be desired, you just have to keep that in mind.

Problem

Is it worth to do the ToList() before doing the GroupBy() and ToDictionary() twice as in example below. Does the ToList() may maximize the performance when creating the dictionary? Without ToList() Resharper is yelling about possible multiple enumeration. ``` 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)); } ```

Original source

Related problems