Czasami Resharper ostrzega o:ReSharper dla wyjaśniając "Możliwe wielokrotne wyliczanie IEnumerable"
Możliwość wielokrotnego wyliczenie IEnumerable
Jest an SO question on how to handle this issue, a strona ReSharper wyjaśnia również rzeczy here. To ma jakiś przykładowy kod, który mówi ci to zrobić w zamian:
IEnumerable<string> names = GetNames().ToList();
Moje pytanie dotyczy tego konkretnego sugestia: nie będzie to nadal prowadzić poprzez wyliczanie kolekcji dwa razy w ciągu 2 for-each pętli?
ah! To wyjaśnia to. – user2250250
Nie. Metoda GetEnumerator() zostanie wywołana tylko raz w pętli foreach. Prawdziwy powód to ryzyko zabrudzenia danych. Na przykład w GetNames() istnieje zapytanie SQL, ale tylko zapytanie zwracające IEnurable. Kiedy wywołasz .ToList(), przechowujesz wszystkie dane w pamięci, istnieje niewielkie ryzyko brudnych danych.Ale jeśli pomiędzy 2 opcjami pętli jest dużo czasu, jeśli za każdym razem wykluczysz SQL do bazy danych, istnieje duże ryzyko zabrudzenia danych. –
@SunRobin jest to odpowiedź, która przedstawia prawdę w uproszczonej formie, jak również jest w niej wspomniana. Nie udało mi się jeszcze tego poprawić. Korzystanie z "brudnych danych" może wymagać dodatkowych wyjaśnień. – CodeCaster