Z tego, co wiem, w .NET 4.0 nadal brakuje list tylko do odczytu. Dlaczego frameworkowi nadal brakuje tej funkcjonalności? Czy nie jest to jedna z najpopularniejszych funkcji w projektowaniu opartym na domenie ?
Jedną z nielicznych zalet Java w porównaniu z C # jest to w postaci metody Collections.unmodifiablelist (list) , która wydaje się być od dawna spóźniona w IList <T> lub List <T>.
Użycie IEnumerable<T>
jest najłatwiejszym rozwiązaniem pytania - ToList
można z niego skorzystać i zwrócić kopię.
c#
java
.net
readonly-collection
Chris S.
źródło
źródło
List<T>
do odczytu, jest napisanie własnej, nie ma wbudowanej klasy, o której wiem, która obsługuje wszystkie funkcje „tylko do odczytu”, takieList<T>
jakContains
zapytania LINQ itp.Odpowiedzi:
Szukasz tego
ReadOnlyCollection
, co istnieje od .NET2.lub
Tworzy to widok tylko do odczytu , który odzwierciedla zmiany wprowadzone w opakowanej kolekcji.
źródło
Dla tych, którzy lubią używać interfejsów: .NET 4.5 dodaje ogólny
IReadOnlyList
interfejs, który jest zaimplementowanyList<T>
np. Przez .Jest podobny do właściwości indeksatora
IReadOnlyCollection
i dodaje jąItem
.źródło
A co z ReadOnlyCollection już w ramach?
źródło
Jeśli najczęstszym wzorcem listy jest iteracja przez wszystkie elementy,
IEnumerable<T>
lubIQueryable<T>
może również skutecznie działać jako lista tylko do odczytu.źródło
ToList()
, tylko kopięIEnumerable
nie jest to pełny zestaw metod „tylko do odczytu”, na przykład nie zawiera metod takich jakContains
.W wersji 2.0 możesz zadzwonić,
AsReadOnly
aby uzyskać wersję listy tylko do odczytu. Lub owinąć istniejącyIList
wReadOnlyCollection<T>
obiekcie.źródło
Co jest nie tak z System.Collections.ObjectModel.ReadOnlyCollection ?
źródło