Cuándo utilizar colecciones genéricasWhen to Use Generic Collections

Generalmente se recomienda usar colecciones genéricas, ya que se obtiene 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.Using generic collections is generally recommended, because you gain the immediate benefit of type safety without having to derive from a base collection type and implement type-specific members. Los tipos de colección genéricos también suelen funcionan mejor que los correspondientes tipos de colección no genéricos (y mejor que los tipos que se derivan de los tipos de colección base no genéricos) cuando los elementos de la colección son tipos de valor; esto se debe a que con los genéricos no es necesario realizar una conversión boxing de los elementos.Generic collection types also generally perform better than the corresponding nongeneric collection types (and better than types that are derived from nongeneric base collection types) when the collection elements are value types, because with generics there is no need to box the elements.

En programas destinados a .NET Framework 4 o una versión posterior, utilice las clases de colección genérica en el espacio de nombres System.Collections.Concurrent cuando varios subprocesos puedan agregar o quitar elementos de la colección al mismo tiempo.For programs that target the .NET Framework 4 or later, you should use the generic collection classes in the System.Collections.Concurrent namespace when multiple threads might be adding or removing items from the collection concurrently.

Los siguientes tipos genéricos corresponden a los tipos de colección existentes:The following generic types correspond to existing collection types:

Tipos adicionalesAdditional Types

Hay varios tipos de colección genéricos que no tienen un tipo homólogo no genérico.Several generic collection types do not have nongeneric counterparts. Entre esos tipos se incluyen los siguientes:They include the following:

LINQ to ObjectsLINQ to Objects

La característica LINQ to Objects permite usar consultas LINQ para obtener acceso a los objetos en memoria mientras el tipo de objeto implemente la interfaz System.Collections.IEnumerable o System.Collections.Generic.IEnumerable<T> .The LINQ to Objects feature enables you to use LINQ queries to access in-memory objects as long as the object type implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable<T> interface. Las consultas LINQ proporcionan un modelo común para el acceso a datos; suelen ser más concisas y legibles que los bucles foreach estándar, y proporcionan capacidades de filtrado, ordenación y agrupación.LINQ queries provide a common pattern for accessing data; are typically more concise and readable than standard foreach loops; and provide filtering, ordering and grouping capabilities. Las consultas LINQ también pueden mejorar el rendimiento.LINQ queries can also improve performance. Para más información, vea LINQ to Objects (C#), LINQ to Objects (Visual Basic) y Parallel LINQ (PLINQ).For more information, see LINQ to Objects (C#), LINQ to Objects (Visual Basic), and Parallel LINQ (PLINQ).

Funcionalidad adicionalAdditional Functionality

Algunos de los tipos genéricos tienen funcionalidades que no se encuentran en los tipos de colección no genéricos.Some of the generic types have functionality that is not found in the nongeneric collection types. Por ejemplo, la clase List<T> , que se corresponde con la clase ArrayList no genérica, tiene una serie de métodos que aceptan delegados genéricos, como el delegado Predicate<T> que permite especificar los métodos de búsqueda en la lista, el delegado Action<T> que representa los métodos que actúan en cada elemento de la lista y el delegado Converter<TInput,TOutput> que permite definir conversiones entre tipos.For example, the List<T> class, which corresponds to the nongeneric ArrayList class, has a number of methods that accept generic delegates, such as the Predicate<T> delegate that allows you to specify methods for searching the list, the Action<T> delegate that represents methods that act on each element of the list, and the Converter<TInput,TOutput> delegate that lets you define conversions between types.

La clase List<T> permite especificar sus propias implementaciones de interfaz genérica IComparer<T> para la ordenación y búsqueda en la lista.The List<T> class allows you to specify your own IComparer<T> generic interface implementations for sorting and searching the list. Las clases SortedDictionary<TKey,TValue> y SortedList<TKey,TValue> también tienen esta capacidad.The SortedDictionary<TKey,TValue> and SortedList<TKey,TValue> classes also have this capability. Además, estas clases le permiten especificar los comparadores cuando se crea la colección.In addition, these classes let you specify comparers when the collection is created. De forma similar, las clases Dictionary<TKey,TValue> y KeyedCollection<TKey,TItem> le permiten especificar sus propios comparadores de igualdad.In similar fashion, the Dictionary<TKey,TValue> and KeyedCollection<TKey,TItem> classes let you specify your own equality comparers.

Vea tambiénSee also