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