2017-01-13 53 views
7

Kiedy mam IEnumerable<SomeClass>, z którego nie wiem, czy jest to lista, czy nie (pod względem List<T>), i muszę wymienić tę IEnumerable, aby upewnić się, że nie wyliczyłem tego wyliczalnego dwukrotnie (na przykład pętli nad nim dwa razy lub coś w tym stylu).Czy rzutowanie na IList, a następnie wywołanie ToList(), gdy null jest lepszy niż zwykły ToList()?

Resharper ostrzega mnie o możliwości wielokrotnego wyliczenie IEnumerable - co jest dobre, czasami można go zapomnieć - i pozwala na wybrał quickfixes:

  • wyliczyć na tablicy
  • Wyliczanie do listy

Po wybraniu opcji Wyliczyć do listy, resharper wprowadza zmienną lokalną i przypisuje wartość IEnumerable w następujący sposób (przykład):

var enumeratedItems = items as IList<SomeClass> ?? items.ToList(); 

Teraz moje pytanie brzmi:

Dlaczego po prostu nie robi się items.ToList();?

Co jest zaletą próbuje rzucić do IList<SomeClass> pierwszy?

Odpowiedz

7

Może IEnumerable jest już lista, w tym przypadku wywołującego ToList() po prostu utworzyć nową listę z exsiting jednego, więc zanim robi to ReSharper sugerują, aby spróbować go rzucić najpierw sprawdzić, czy jest to IList lub nie i tylko w przypadku, gdyby nie, wykonamy operację ToList(), która wiąże się z pewnymi kosztami.

+0

Och, widzę, ma sens! Dziękuję Ci :) – Mafii