Solucionar problemas de colecciones
Actualización: noviembre 2007
Esta página muestra algunos problemas comunes que pueden aparecer al trabajar con colecciones.
Utilizar el tipo de colección equivocado
Hay varios tipos de colecciones disponibles para los desarrolladores de Visual Basic: la clase Collection de Visual Basic y las clases de colección proporcionadas por .NET Framework. Estas clases no son compatibles entre sí. Esto significa que, si declara una variable para que sea de un tipo de colección, no puede asignar un objeto de otro tipo a esa variable. Además, sólo puede tener acceso a los métodos y propiedades del tipo de colección que ha declarado.
Las diferencias principales entre Visual Basic y clases de colección de .NET Framework incluyen lo siguiente:
Base de índice. Las colecciones de .NET Framework están basadas en cero, mientras que las colecciones de Visual Basic están basadas en uno. Esto significa que los elementos de una colección de Visual Basic tienen valores de índice comprendidos entre 1 y el valor de Count (Propiedad, objeto Collection), mientras que los elementos de una colección de .NET Framework tienen valores de índice que van desde 0 hasta uno menos que el valor de la propiedad Count de la colección.
Tipo de elemento. La colección de Visual Basic admite elementos de tipo Object, que no posee seguridad de tipos porque puede agregar un elemento de cualquier tipo de datos. Esto normalmente produce una degradación del rendimiento porque el compilador debe aplicar conversiones boxing y unboxing a los elementos para convertirlos al Object (Tipo de datos) y desde él. Algunas de las colecciones de .NET Framework también tienen elementos del tipo Object, pero muchas otras tienen establecimiento inflexible de tipos, que significa que admiten elementos de un tipo específico, lo cual les atribuye seguridad de tipos y normalmente permite conseguir un rendimiento óptimo.
Elementos con clave. La colección de Visual Basic permite especificar una clave cuando se agrega un elemento a ella. La clave es un valor String único que se puede utilizar después para tener acceso a ese elemento concreto. Las colecciones .NET Framework varían con respecto a las claves. Algunas admiten claves y otras no.
Los espacios de nombres que contienen las distintas definiciones de clase de colección son los siguientes:
Microsoft.VisualBasic — clase Collection de Visual Basic
System.Collections — clases de colección específicas como listas, colas, matrices de bits, tablas de hash y diccionarios
System.Collections.Generic — clases de colección genéricas, que permiten crear colecciones con establecimiento inflexible de tipos y especificar el tipo de datos de los elementos cuando se crean
System.Collections.Specialized — clases de colección especializadas con establecimiento inflexible de tipos, como diccionarios híbridos y de listas vinculadas, colecciones de bits-vectores y nombres-objetos, y colecciones sólo de cadenas
Enfoque correcto
Determine qué tipo de colección es más adecuado para sus necesidades. Declare su variable de colección para que sea de ese tipo y asegúrese de crear un objeto de ese mismo tipo. Utilice la calificación completa para asegurarse de que está especificando el tipo de colección deseado. El ejemplo siguiente muestra dos declaraciones con calificación completa.
Dim customers As New Microsoft.VisualBasic.Collection()
Dim stringQueue As New System.Collections.Generic.Queue(Of String)
Una vez creada una colección de un tipo específico, asegúrese de utilizar sólo los métodos y propiedades definidos en ese tipo. Establezca Option Strict On para detectar cualquier asignación incorrecta de objeto o acceso a miembro en tiempo de compilación.
Vea también
Conceptos
Clase de colección de Visual Basic