Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El uso de colecciones genéricas ofrece la ventaja inmediata de la seguridad de tipos sin necesidad de derivar de un tipo de colección base ni de implementar miembros específicos de tipo. Los tipos de colección genéricos también suelen funcionar mejor que los tipos de colección no genéricos correspondientes (y mejores que los tipos derivados de tipos de colección base no genéricos) cuando los elementos de colección son tipos de valor, ya que con genéricos, no es necesario boxear los elementos.
En el caso de los programas que tienen como destino .NET Standard 1.0 o posterior, use las clases de colección genéricas en el System.Collections.Concurrent espacio de nombres cuando varios subprocesos podrían agregar o quitar elementos de la colección simultáneamente. Además, cuando desee la inmutabilidad, considere las clases de colección genéricas en el System.Collections.Immutable espacio de nombres.
Los siguientes tipos genéricos corresponden a los tipos de colección existentes:
Dictionary<TKey,TValue> y ConcurrentDictionary<TKey,TValue> son las clases genéricas que corresponden a Hashtable.
Collection<T> es la clase genérica que corresponde a CollectionBase. Collection<T> se puede usar como una clase base, pero a diferencia CollectionBasede , no es abstracta, lo que facilita mucho el uso.
ReadOnlyCollection<T> es la clase genérica que corresponde a ReadOnlyCollectionBase. ReadOnlyCollection<T> no es abstracto y tiene un constructor que facilita la exposición de un existente List<T> como una colección de solo lectura.
Las Queue<T>clases genéricas , ConcurrentQueue<T>, ImmutableQueue<T>ImmutableArray<T>, , SortedList<TKey,TValue>y ImmutableSortedSet<T> corresponden a las clases no genéricas respectivas con los mismos nombres.
Tipos adicionales
Varios tipos de colección genéricos no tienen homólogos no genéricos. Incluyen lo siguiente:
LinkedList<T> es una lista vinculada de uso general que proporciona operaciones de eliminación e inserción O(1).
SortedDictionary<TKey,TValue> es un diccionario ordenado con operaciones de inserción y recuperación de O(log
n
), lo que hace que sea una alternativa útil a SortedList<TKey,TValue>.KeyedCollection<TKey,TItem> es un híbrido entre una lista y un diccionario, que proporciona una manera de almacenar objetos que contienen sus propias claves.
BlockingCollection<T> implementa una clase de colección con funcionalidad de límite y bloqueo.
ConcurrentBag<T> proporciona una inserción y eliminación rápidas de elementos no ordenados.
Constructores inmutables
Cuando desees funcionalidad inmutable en tu aplicación, el System.Collections.Immutable espacio de nombres ofrece tipos de colección genéricos que puedes usar. Todos los tipos de colección inmutables ofrecen Builder
clases que pueden optimizar el rendimiento al realizar varias mutaciones. La clase Builder
agrupa operaciones en un estado mutable. Cuando se hayan completado todas las mutaciones, llame al método ToImmutable
para "inmovilizar" todos los nodos y cree una colección genérica inmutable, por ejemplo, una ImmutableList<T>.
El Builder
objeto se puede crear llamando al método no genérico CreateBuilder()
. En una instancia de Builder
, se puede llamar a ToImmutable()
. Del mismo modo, en la colección Immutable*
, se puede llamar a ToBuilder()
para crear una instancia de generador a partir de la colección inmutable genérica. A continuación se muestran los distintos Builder
tipos.
- ImmutableArray<T>.Builder
- ImmutableDictionary<TKey,TValue>.Builder
- ImmutableHashSet<T>.Builder
- ImmutableList<T>.Builder
- ImmutableSortedDictionary<TKey,TValue>.Builder
- ImmutableSortedSet<T>.Builder
LINQ to Objects (LINQ para Objetos)
La característica LINQ to Objects permite usar consultas LINQ para acceder a objetos en memoria siempre que el tipo de objeto implemente la System.Collections.IEnumerable interfaz o System.Collections.Generic.IEnumerable<T> . Las consultas LINQ proporcionan un patrón común para acceder a los datos; normalmente son más concisos y legibles que los bucles estándar foreach
y proporcionan funcionalidades de filtrado, ordenación y agrupación. Las consultas LINQ también pueden mejorar el rendimiento. Para obtener más información, vea LINQ to Objects (C#),LINQ to Objects (Visual Basic) y Parallel LINQ (PLINQ).
Funcionalidad adicional
Algunos de los tipos genéricos tienen funcionalidad que no se encuentra en los tipos de colección no genéricos. Por ejemplo, la List<T> clase , que corresponde a la ArrayList clase no genérica, tiene una serie de métodos que aceptan delegados genéricos, como el Predicate<T> delegado que permite especificar métodos para buscar en la lista, el Action<T> delegado que representa los métodos que actúan en cada elemento de la lista y el Converter<TInput,TOutput> delegado que permite definir conversiones entre tipos.
La List<T> clase permite especificar sus propias IComparer<T> implementaciones de interfaz genéricas para ordenar y buscar en la lista. Las SortedDictionary<TKey,TValue> clases y SortedList<TKey,TValue> también tienen esta funcionalidad. Además, estas clases permiten especificar comparadores cuando se crea la colección. De forma similar, las Dictionary<TKey,TValue> clases y KeyedCollection<TKey,TItem> permiten especificar sus propios comparadores de igualdad.