Compartir a través de


Cuándo utilizar colecciones genéricas

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:

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.

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.

Consulte también