2015-08-21 13 views

Odpowiedz

15

Jednym ze sposobów byłoby skonstruować listę, a na niej zadzwonić AsReadOnly():

IReadOnlyCollection<Object> rdOnly = orig.ToList().AsReadOnly(); 

ta produkuje ReadOnlyCollection<object>, który realizuje IReadOnlyCollection<Object>.

Uwaga: Od List<T> narzędzia IReadOnlyCollection<T> jak dobrze, wezwanie do AsReadOnly() jest opcjonalne. Chociaż można wywołać metodę z wynikiem ToList(), wolę używać AsReadOnly(), aby czytelnicy mojego kodu widzieli, że metoda, do której dzwonię, nie ma zamiaru modyfikować mojej listy. Oczywiście mogliby znaleźć to samo, patrząc na sygnaturę metody, do której dzwonię, ale miło jest być jej jednoznacznym.

+2

Lista implementuje także IReadOnlyCollection, AsReadOnly nie jest ściśle nessisaria –

+0

@ScottChamberlain Dziękujemy! Zmontowałem, aby wyjaśnić ten punkt. – dasblinkenlight

+0

Dzięki za notatkę, To był dobry punkt –

0

Jako alternatywę dla odpowiedzi dasblinkenlight, w celu zapobieżenia rozmówca odlewania do listy <T>, zamiast robić orig.ToList().AsReadOnly() następujący może być lepiej:

ReadOnlyCollection<object> rdOnly = Array.AsReadOnly(orig.ToArray()); 

To ta sama liczba wywołań metod, ale jeden bierze drugi jako parametr zamiast wywoływania go na wartość zwracaną.