GetNames()повертає IEnumerable. Отже, якщо ви зберігаєте цей результат:
IEnumerable foo = GetNames();
Потім кожного разу, коли ви перелічуєте foo, GetNames()метод викликається знову (не буквально, я не можу знайти посилання, яке правильно пояснює деталі, але бачу IEnumerable.GetEnumerator()).
Resharper це бачить і пропонує вам зберегти результат перерахування GetNames()в локальній змінній, наприклад, матеріалізуючи його у списку:
IEnumerable fooEnumerated = GetNames().ToList();
Це забезпечить GetNames()перерахування результату лише один раз, якщо ви на це посилаєтесь fooEnumerated.
Це має значення, оскільки зазвичай ви хочете нумерувати лише один раз, наприклад, коли GetNames()виконується (повільний) виклик бази даних.
Оскільки ви матеріалізували результати у списку, більше не має значення, що ви перераховуєте fooEnumeratedдвічі; ви будете двічі перебирати список в пам'яті.