Udostępnij za pośrednictwem


Kiedy należy używać kolekcji ogólnych

Korzystanie z kolekcji ogólnych zapewnia automatyczną korzyść bezpieczeństwa typu bez konieczności uzyskiwania od podstawowego typu kolekcji i implementowania składowych specyficznych dla typu. Typy kolekcji ogólnych zwykle działają lepiej niż odpowiadające im typy kolekcji niegenerycznych (i lepsze niż typy pochodzące z niegenerycznych typów kolekcji bazowych), gdy elementy kolekcji są typami wartości, ponieważ w przypadku typów ogólnych nie ma potrzeby tworzenia pól.

W przypadku programów przeznaczonych dla platformy .NET Standard 1.0 lub nowszego należy użyć ogólnych klas kolekcji w System.Collections.Concurrent przestrzeni nazw, gdy wiele wątków może dodawać lub usuwać elementy z kolekcji jednocześnie. Ponadto w razie potrzeby niezmienności należy wziąć pod uwagę ogólne klasy kolekcji w System.Collections.Immutable przestrzeni nazw.

Następujące typy ogólne odpowiadają istniejącym typom kolekcji:

Dodatkowe typy

Kilka typów kolekcji ogólnych nie ma niegenerycznych odpowiedników. Te kraje to:

Konstruktorzy niezmienni

Gdy chcesz korzystać z funkcji niezmienności w aplikacji, System.Collections.Immutable przestrzeń nazw oferuje ogólne typy kolekcji, których można użyć. Wszystkie niezmienne typy kolekcji oferują Builder klasy, które mogą zoptymalizować wydajność podczas wykonywania wielu mutacji. Operacje Builder wsadowe klasy w stanie modyfikowalnym. Po zakończeniu wszystkich mutacji wywołaj metodę ToImmutable "freeze" wszystkich węzłów i utwórz niezmienną kolekcję ogólną, na przykład ImmutableList<T>.

Obiekt Builder można utworzyć przez wywołanie metody niegenericznej CreateBuilder() . Z wystąpienia można wywołać metodę BuilderToImmutable(). Podobnie z kolekcji Immutable* można wywołać ToBuilder() metodę , aby utworzyć wystąpienie konstruktora z ogólnej kolekcji niezmiennej. Poniżej przedstawiono różne Builder typy.

LINQ do obiektów

Funkcja LINQ to Objects umożliwia używanie zapytań LINQ do uzyskiwania dostępu do obiektów w pamięci, o ile typ obiektu implementuje System.Collections.IEnumerable interfejs lub System.Collections.Generic.IEnumerable<T> . Zapytania LINQ zapewniają wspólny wzorzec uzyskiwania dostępu do danych; są zwykle bardziej zwięzłe i czytelne niż foreach standardowe pętle, a także zapewniają możliwości filtrowania, porządkowania i grupowania. Zapytania LINQ mogą również zwiększyć wydajność. Aby uzyskać więcej informacji, zobacz LINQ to Objects (C#), LINQ to Objects (Visual Basic) i Parallel LINQ (PLINQ).

Dodatkowe funkcje

Niektóre typy ogólne mają funkcje, których nie można znaleźć w typach kolekcji niegenerycznych. Na przykład List<T> klasa, która odpowiada klasie niegenericznej ArrayList , ma wiele metod, które akceptują delegaty ogólne, takie jak Predicate<T> delegat, który umożliwia określenie metod wyszukiwania listy, Action<T> delegata reprezentującego metody, które działają na każdym elemenie listy, oraz Converter<TInput,TOutput> delegat, który umożliwia definiowanie konwersji między typami.

Klasa List<T> umożliwia określenie własnych IComparer<T> implementacji interfejsu ogólnego na potrzeby sortowania i przeszukiwania listy. Klasy SortedDictionary<TKey,TValue> i SortedList<TKey,TValue> mają również tę możliwość. Ponadto te klasy umożliwiają określenie porównań podczas tworzenia kolekcji. W podobny sposób Dictionary<TKey,TValue> klasy i KeyedCollection<TKey,TItem> umożliwiają określenie własnych porównań równości.

Zobacz też