Resharper's example code for explaining "Possible multiple enumeration of IEnumerable"
c#, resharper, resharper-7.1
Solution
`GetNames()` returns an `IEnumerable`. So if you store that result:
IEnumerable foo = GetNames();
Then every time you enumerate `foo`, the `GetNames()` method is called again (not literally, I can't find a link that properly explains the details, but see `IEnumerable.GetEnumerator()`).
Resharper sees this, and suggests you to store the result of enumerating `GetNames()` in a local variable, for example by materializing it in a list:
IEnumerable fooEnumerated = GetNames().ToList();
This will make sure that the `GetNames()` result is only enumerated once, as long as you refer to `fooEnumerated`.
This does matter because you usually want to enumerate only once, for example when `GetNames()` performs a (slow) database call.
Because you materialized the results in a list, it doesn't matter anymore that you enumerate `fooEnumerated` twice; you'll be iterating over an in-memory list twice.
Problem
Sometimes Resharper warns about: Possible multiple enumeration of IEnumerable There's an SO question on how to handle this issue, and the ReSharper site also explains things here. It has some sample code that tells you to do this instead: ``` IEnumerable<string> names = GetNames().ToList(); ``` My question is about this specific suggestion: won't this still result in enumerating through the collection twice in the 2 for-each loops?