Este artículo proviene de un motor de traducción automática.
Instintos básicos
Colección y los inicializadores de matriz en Visual Basic 2010
Adrian Spotty Bowles
Algunos de los cambios de idioma que han tenido lugar durante el ciclo del producto Microsoft Visual Studio (VS) 2010 han ha destinadas a simplificar las tareas que eran posibles anteriormente sólo mediante el uso de mucho código repetitivo. Este enfoque en Visual Studio 2010 mejora la experiencia codificación, lo más productivo. Una de las características de nuevas en Visual Studio para la versión de 2010 es inicializadores de colección. Esta característica estaba disponible en C# en 2008 y como parte de la filosofía de paridad general se ha adopción de Microsoft. Algunos de los cambios realizados en Visual Basic 2010 pueden ser menos obvio y este artículo identificará algunos de los menos obvios detalles de implementación.
Colecciones y las matrices son construcciones muy común en cualquier aplicación moderno y suelen tienen estas colecciones que se va a inicializar. Anterior a las versiones de 2010, Visual Basic fue capaz de controlar a los inicializadores de matriz básica con algunas limitaciones, pero las colecciones no podían inicializarse en una instrucción de una línea similar, que a menudo producido en el código repetitivo similar al siguiente:
Dim x As New List(Of String)
x.Add("Item1")
x.Add("Item2")
O bien, es necesario crear un constructor para la clase utilizando parecido al siguiente:
Dim x as new list(of string)({"Item1","Item2"})
Ninguno de estos enfoques fueron especialmente elegante soluciones.
Aunque ambos trabajado, implica escribir código adicional para inicializar la colección. Aunque este código a menudo es código repetitivo sencillo, puede recargar el código fuente, que puede conducir a los costos de mantenimiento asociadas.
Si observa a través de casi cualquier código que utiliza las colecciones, verá código repetitivo similar. En el ejemplo anterior, se están agregando sólo dos elementos de cadena y se utilizan llamadas repetitivas al método add para cada una de las cadenas. Si se utiliza un personalizado que "definido por el usuario"colección o una colección de "definido por el usuario"tipos, aumentaría el código estándar para realizar la misma tarea de inicializar la colección.
Nueva sintaxis
Con Visual Studio. 2010, estamos ahora capaces de controlar esta tarea de inicialización de la colección en un formulario mucho más concisa, reducción de las varias líneas de código y llamadas de método agregar repetidas en una única instrucción:
Dim x As New List(Of String) From {"Item1", "Item2"}
Esto es un ejemplo simple utilizando tipos de colección de lista genérico del marco de trabajo para proporcionar una colección de seguridad de tipos. Estos tipos de colección son ahora más frecuente que los tipos de colección artesanales, que se utilizaron en el pasado para implementar seguridad de tipos colecciones.
La sintaxis permite a los miembros de colección especificarse como una lista de elementos contenidos dentro de las llaves {}, y cada elemento es separado por comas con "FROM"palabra clave para determinar el list.The miembro inicial anterior ejemplo funciona bien para un tipo de lista, pero para tipos de colección más complejos, como diccionarios, dónde puede haber un par clave-valor proporcionados para cada miembro, necesitamos un conjunto adicional de llaves alrededor de cada par de clave y valor, como sigue:
Dim x As New Dictionary(Of Integer, String)
From {{1, "Item1"}, {2, "Item2"}}
La sintaxis es limpio y coherente. Cada par de clave-valor viene determinado por el {} anidado, y estos argumentos se utilizan cuando se realiza una llamada al método Add (diccionario) del tipo de colección. Por lo que sería igualar las líneas anteriores para:
Dim x As New Dictionary(Of Integer, String)
x.Add(1, "Item1")
x.Add(2, "Item2")
Implementación y uso en otros tipos de colección
Los ejemplos anteriores muestran cómo colecciones inicializan el uso de tipos de marco de trabajo típica. Sin embargo, es posible que haya implementado sus propios tipos de colección o que desee utilizar algunos tipos que no son inmediatamente capaces de utilizar el inicializador porque carecen de un método Add (ejemplos incluyen Stack, Queue).
Para poder utilizar la característica inicializador de colección en ambos casos estos, es importante entender un poco acerca de lo que sucede en segundo plano y cómo se implementa esta característica. Este conocimiento, a continuación, nos permitirá ampliar su uso más allá de los ejemplos de diccionario y de lista simples.
Utilizar sintaxis de inicializador de colección, se requieren dos elementos a ser true. El tipo debe:
- Implementar el modelo de IEnumerable, que puede ser la interfaz IEnumerable o simplemente tienen un método GetEnumerator. Esto es posible que se denomina "duck"escriba: Si el aspecto de un pato y quacks como un pato, a continuación, probablemente es un pato.
En nuestro caso, si contiene un método GetEnumerator con una firma apropiada, a continuación, que probablemente implementa un comportamiento similar para la interfaz IEnumerable. Ya se utiliza este comportamiento escribiendo duck para permitir tipos para utilizarse con el para cada construcción. - Contener al menos un método de agregar accesible con un parámetro. Puede tratarse de una instancia o un método de extensión.
Si una clase de colección cumple estas condiciones de ambos, puede utilizar la sintaxis de inicializador de colección.
Para inicializadores de colección no realmente utilizamos el método IEnumerable para inicializar la colección, pero nos utilizar como una sugerencia para determinar que este tipo es, de hecho, un tipo de colección. Si implementa IEnumerable o el patrón de IEnumerable, a continuación, hay una probabilidad alta que tiene una colección, aunque no se garantiza.
El método Add se llama para cada elemento en la lista de inicializador para agregar elementos a la colección. El hecho de presente que un método Add no significa necesariamente tiene que implementar funcionalidad para agregar elementos a la colección. Pero las llamadas a un método Add con los argumentos se cambian en la lista"Initialize"se realizarán.
Para ilustrar este punto, el ejemplo de código siguiente de de figura 1 es válido y puede utilizar la sintaxis de inicializador de colección, pero en realidad no agrega elementos a una colección.
Otras clases de Framework, utilizar con métodos de extensión
Algunos de los tipos de colección de marco de trabajo no cumplan ambos estos requisitos. Las pilas y colas implementan métodos como POP y inserción en lugar de agregar. Para poder utilizar la característica concisa de inicializador de colección para estos tipos, puede aprovechar la eficacia de los métodos de extensión. Resulta sencillo crear un método Agregar extensión para estos tipos, que a continuación, le permitirá para inicializar los métodos con sintaxis simple.
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim st1 As New Stack(Of Integer) From {1, 2, 3}
End Sub
End Module
Module Extensions
<Extension()> Sub Add(Of t)(ByVal x As Stack(Of t), ByVal y As t)
x.Push(y)
End Sub
End Module
Al utilizar los métodos de extensión, conviene generalmente para extender sólo los tipos control sobre. Liberales el uso de métodos de extensión puede conducir a conflictos o los cambios en el comportamiento si se actualizan los tipos, por lo tanto, utilizarlos con precaución.
Utilizar con la continuación de línea implícito
Visual Studio 2010 también contiene otra característica esperado mucho: continuación de línea. Esta característica permite eliminar los caracteres _ molestos. Continuación de línea implícita está permitido para los elementos de la "inicializar List", por lo que es posible colocar cada uno de estos elementos en sus propias líneas para mayor claridad.
Dim st1 As New Stack(Of Integer) From {1,
2,
3}
Sintaxis de inicializador de colección de la figura 1
Module Module1
Sub Main()
Dim NC As New TestNonCollectionClass From {1, 2, 3}
End Sub
End Module
Class TestNonCollectionClass
Public Function GetEnumerator() As System.Collections.IEnumerator
'Does Nothing
End Function
Public Sub Add(ByVal x As Integer)
If x = 1 Then
Console.WriteLine("Add Item" & x.ToString)
End If
End Sub
End Class
Esto permite producir código limpio que es fácil de leer, no contiene caracteres adicionales _ y evita la repetición. Puede utilizar para sus propias colecciones y las ya está en el marco de trabajo. Compatibilidad de IntelliSense del editor permite que "FROM"compatibilidad con todos los tipos que siguen las reglas de dos anteriores, lo que significa que funcionará para los tipos de colección. Si tiene código existente que utiliza el carácter _ y prefiere siguen siendo coherentes con la sintaxis antigua, aún se admite esta opción.
Comportamiento de control de excepciones
Hay unos cuantos interesante cosas para señalar cuando se llama al método Add para cada uno de la "lista de inicializador"miembros.
Por ejemplo, cuando una llamada al método Add con el argumento proporcionado desde los resultados de inicializar la lista en una excepción, no se inicializará la lista con todos los miembros. Esto significa en realidad es que la colección se inicializa con todos los miembros o su no inicializado en absoluto.
Esto significa que si la lista tiene tres elementos y el tercero cuando se llama en Agregar método produce una excepción, obtendrá una excepción y una colección sin inicializar. El followingexample intencionadamente genera una excepción para demostrar esta situación exacta y resultados de "Blanco"está escribiendo en la consola. Sin embargo, cambiar la lista de inicializador para quitar el valor tres dará como resultado "Initialized: elemento número 2"como se muestra en de figura 2.
Figura 2 cambiar la lista de inicializador
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim l1 As Stack(Of Integer)
Try
l1 = New Stack(Of Integer) From {1, 2}
Catch ex As Exception
End Try
If l1 Is Nothing Then
Console.WriteLine("Blank")
Else
Console.WriteLine("Initialized - Element Count:" & l1.Count)
End If
End Sub
End Module
Module Extensions
<Extension()> Sub Add(Of t)(ByVal x As Stack(Of t), ByVal y As t)
If y.ToString = "3" Then
Throw New Exception("Intentional Exception")
Else
x.Push(y)
End If
End Sub
End Module
Si esto no ocurre, sería necesario elaborar código adicional para determinar si se han producido no excepciones de inicialización y de qué estado de la colección estaba en.
Utilizar métodos de extensión para acortan la sintaxis
La sintaxis estándar para inicializar una colección de objetos complejos de resultados en la necesidad de repetir "Nuevo tipo de < >"para cada uno de los elementos de la lista de inicializador.
Module Module1
Sub Main()
Dim CustomerList As New List(Of Customer)
From {New Customer With {.Name = "Spotty", .Age = 39},
New Customer With {.Name = "Karen", .Age = 37}}
End Sub
End Module
Class Customer
Public Property Name As String = ""
Public Property Age As Integer = 0
End Class
La sintaxis requiere que cada elemento de la lista de inicializador se crea una instancia. Mediante el uso de métodos de extensión, es posible acortar esta sintaxis aún. La funcionalidad se basa en el hecho de que el tipo de colección admite la interfaz IEnumerable y también tiene un método Add, que dará como resultado los elementos de lista de inicializador adjuntos se asignan a los parámetros del método add, como se muestra en de figura 3.
Figura 3 uso de métodos de extensión
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
'Shortend Syntax through the use of extension methods
Dim CustomerList As New List(Of Customer)
From {{"Spotty", 39}, {"Karen", 37}}
End Sub
End Module
Module Extension
<Extension()> Public Sub add(ByVal x As List(Of Customer), _
ByVal Name As String, ByVal Age As Integer)
x.add(New Customer With {.Name = Name, .Age = Age})
End Sub
End Module
Class Customer
Public Property Name As String = ""
Public Property Age As Integer = 0
End Class
Agregar la sobrecarga de método
La condición del método Add es esencial para esta característica y se puede sobrecargar. Cada método llamará a su propio sobrecarga basándose en los argumentos de llamada. No hay aquí mágico y funciona de la resolución de sobrecarga del método Add tal como resolución funciona para cualquier método de sobrecarga.
Este nuevo se mejor muestra mediante un ejemplo sencillo. En de figura 4, tenemos sobrecargas para diferentes tipos de datos, llamaremos al apropiado para el argumento de llamada.
¿Por qué es el uso de la sintaxis 'FROM' y no '='?
Una pregunta común más frecuentes del equipo del producto para esta característica es el uso de "FROM"palabra clave, porque los inicializadores de matriz ya están usando el "="para la asignación.
En Visual Basic, es posible crear instancias de una clase de colección de tres maneras diferentes:
Dim x1 As New List(Of Integer)
Dim x2 = New List(Of Integer)
Dim x3 As List(Of Integer) = New List(Of Integer)
Agregar a esta el hecho de que dos de las sintaxis para crear instancias de una colección ya incluyen un carácter en la sintaxis =. Mediante una adicional = carácter daría como resultado confusión en la sintaxis entre que la asignación de una nueva instancia del tipo de colección y la inicialización de miembros a la colección.
Por lo tanto, con una palabra clave en vez de un carácter = para determinar el resultado de una acción Collection initializer evita este problema y permite todo existente convenciones de sintaxis declarar e inicializar tipos de colección. Aún la forma de determinar la lista de inicializador permanece familiar para la sintaxis de inicializador de matriz existente.
La palabra clave FROM se eligió después de mucho debate. Para aquellos familiarizados con las consultas LINQ, puede parecer una elección extraña como hay una palabra clave FROM utilizada en LINQ. Puede parecer que esta opción podría producir ambigüedades posibles cuando se utiliza dentro de las consultas LINQ, pero como verá, no es el caso.
No 'FROM'ENTRAR en conflicto con 'FROM'¿en consultas?
Incluso en las consultas que contienen a los inicializadores de colección, no hay ninguna ambigüedad de la palabra clave. Puede mostrar en el siguiente código:
Module Module1
Sub Main()
'The first from is the query,
'the second is the collection initializer.
'The parser can always successfully identify the difference
Dim x = From i In New List(Of Integer) From {1, 2, 3, 4}
Where i <= 3
Select i
For Each i In x
Console.WriteLine(i)
Next
Stop
End Sub
End Module
Limitaciones mediante Initalizer de colección con el inicializador de objeto
Para el producto de 2008, el equipo de Visual Basic implementa inicializadores de objeto que habilitan el desarrollador para inicializar los campos y propiedades del objeto cuando se instancias de una instancia de objeto:
Dim x As New List(Of Integer) With {.Capacity = 10}
Sin embargo, no es posible inicializar el objeto y la colección en la misma declaración, por lo siguiente provocará un error de sintaxis:
Dim x as New List(Of Integer) from {1,2,3} With {.Capacity = 10}
Hay algunos cambios menos obvias que producido en 2010 relacionados con las matrices que pueden no ser evidente inmediatamente pero podrían afectar al código utilizando matrices.
Figura 4 sobrecargas para tipos de datos diferente
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim l1 As New Stack(Of Integer) From {1, 2.2, "3"}
Console.WriteLine("Element Count:" & l1.Count)
Stop
End Sub
End Module
Module Extensions
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As Integer)
Console.WriteLine("Integer Add")
X1.Push(x2)
End Sub
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As Double)
Console.WriteLine("Double Add")
X1.Push(CInt(x2))
End Sub
<Extension()> Sub Add(ByVal X1 As Stack(Of Integer), _
ByVal x2 As String)
Console.WriteLine("String Add")
X1.Push(CInt(x2))
End Sub
End Module
Cambios de inicializador de matriz
Aunque antes de la versión de 2010 era posible inicializar matrices sencillas, todavía hay algunas limitaciones. Uno de los cambios recientes permite tipos de matriz se inicializa y se infiere de maneras más conciso.
Anteriormente identificar un elemento en Visual Basic como una matriz necesario especificar un conjunto de paréntesis en el identificador:
Dim a() As Integer = {1, 2, 3}
Ahora estos paréntesis no son necesarios y el tipo se deducirá como un tipo de matriz con Option Infer On, lo que una sintaxis más concisa:
Dim a = {1, 2, 3}
Inferencia de tipos de matriz
En 2008, se implementó la característica de inferencia de tipo, que habilita los tipos de datos se deduce de sus valores de asignación. Esto funcionaba para objetos individuales declarados dentro de cuerpos de método, pero no inferir un tipo de matrices y, por lo tanto, siempre eran matrices de objetos.
Sub Main()
Dim a() = {1, 2, 3}
'Type would previously result in Object Array prior to 2010
End Sub
Esto se ha mejorado y ahora se infieren tipos de matriz, como sigue:
Sub Main()
Dim a = {1, 2, 3} 'Type now infers Integer Array
End Sub
El tipo inferido de la matriz viene determinado por la funcionalidad de tipo dominante agregada en 2008. La inferencia de tipo todavía funciona sólo para código que se declara dentro de cuerpos de método, por lo que campos seguirán estando matrices de objetos a menos que escrito específicamente.
Es posible inicializar varias dimensiones de matriz, pero todos los pares anidados deben contener el mismo número de miembros. Ejemplos de por lo tanto, dos-dimensión funcionará.
Los dos ejemplos siguientes creará tanto una matriz bidimensional de enteros:
Dim TwoDimension1(,) = {{1, 2}, {3, 4}}
Dim TwoDimension2 = {{1, 2}, {3, 4}}
Las matrices unidimensionales, la sintaxis es muy similar al código anterior y todo el código existente seguirán funcionando con algunas excepciones.
Dim a() = {1, 2, 3}
En la instrucción anterior, el tipo de matriz se deducirá de la lista de inicializadores. Esto dará como resultado una matriz de enteros se infiere. En el pasado, estos habría simplemente sido matrices de objetos como se haría no dispone de inferir cualquier tipo de la lista de inicializador de matriz. Si utiliza cualquier código que comprueba el tipo, utiliza la reflexión o contiene varias sobrecargas incluidos tipos de matriz de objeto, ahora esto puede producir resultados diferentes. Esto puede ejemplos de métodos de enlace en tiempo de ejecución.
Matrices multidimensionales
Para que poder inicializar una matriz multidimensional, las dimensiones deben coincidir el número de elementos dentro de la lista de inicializador. Si estos no son los mismos y todos los elementos anidados en la lista de inicialización no tienen un recuento de elemento coherente, se producirá un error de sintaxis:
Dim TwoDimension2 = {{1, 2}, {3, 4}}
'Valid 2 dimension integer(,) array inferred
Dim TwoDimension2Invalid(,) = {{1}, {3}}
'Invalid – dimension and element count mismatch
Dim TwoDimension2Invalid1(,) = {{1, 2}, {3}}
'Invalid:element count not consistent in Initializer List
Esto significa que utilizar la sintaxis similar como antes, es posible inicializar estándar corregidos matrices bidimensional.
Inicialización de matrices escalonadas
Sin embargo, esto significa que para una matriz escalonada (matriz de matrices), esta sintaxis no funcionará como está. Para permitir los inicializadores de matriz escalonada, es necesario que ajuste cada una de las listas de miembro en paréntesis:
Sub Main()
'Incorrect Jagged Array syntax
Dim JaggedDimensionIncorrect()() = {{1,2},{3,4,5}}
'Correct Jagged Array syntax
Dim JaggedDimension1()() = {({1,2}),({3,4,5})}
End Sub
Los resultados del ejemplo anterior en el siguiente:
- JaggedDimension1(0) que contiene la matriz de tipo Integer con elementos 1,2
- JaggedDimension1(1) que contiene la matriz de tipo Integer con elementos 3,4,5
La inferencia de tipo matriz funcionará para los tipos de matriz anidado. Aquí es un ejemplo ligeramente más complejo:
Dim JaggedDimension1() = {({1, 2}), ({3.1, 4.2, 5.3})}
Esto dará como resultado de JaggedDimension1 se deducen como Object() y los miembros es de tipo Integer() y Double().
Inferencia de matriz y el comportamiento esperado
Por lo tanto, busque en la lista de inicializador como matriz inferida. No! La lista de inicializador no es un tipo concreto, como es posible que piense;es una representación sintáctica de una lista de miembros, que se convierte en un tipo específico según el contexto se utiliza en.
El ejemplo de código siguiente se muestra que podemos utilizar la {,} sintaxis para:
1. Inferir e inicializar una matriz de enteros:
Dim a = {1, 2, 3} 'Infers Integer Array
Esto funciona como no se especifica ningún tipo de destino y infiere su tipo según el tipo de los miembros de la lista de inicializador dominante.
2. Inicializar una matriz de tipo diferente:
Dim b As Single() = {1, 2, 3}
'Will convert each integer value into single
Esto funcionará como se inicializará una sola matriz con valores de uno, dos y tres. La lista de inicializador no tiene tipo intrínseco por sí mismo.
Pero se espera los siguientes errores:
Dim a = {1, 2, 3} 'Infers Integer()
Dim c As Single() =
a 'No conversion between Single() and Integer()
Esto puede parecer un poco extraño pero variable un se deducen como una matriz de enteros y se inicializa con valores de uno, dos y tres. C variable se declara como una matriz simple. Sin embargo, no hay ninguna conversión entre una matriz única y una matriz Integer, lo que provocará el error de sintaxis.
Uso del inicializador de matriz independiente
La matriz de lista de inicializador también se pueden utilizar en un contexto independiente, en cuyo caso, tendrá no tienen un tipo de destino especificado y funcionará como una matriz del tipo principal de los miembros de la lista de inicialización.
Esto permite algunos escenarios interesantes no estaba disponibles anteriormente. Un ejemplo podría ser un método que toma una matriz de elementos que desee utilizar para inicializar una estructura de datos. Donde se llama al método, determina valores predeterminados diferentes, que se utilizan como argumentos de llamada, como se muestra en de figura 5.
En este caso, podemos crear una matriz local para cada llamada, simplemente a pasar un tipo de matriz al método. Con la nueva característica de uso independiente, es posible para evitar tener que crear a variables locales innecesarias de este tipo de escenario y se puede utilizar simplemente el inicializador de lista independiente para pasar tipos de matriz.
La lista de inicializador en el escenario de uso independiente se ajusta a un tipo de matriz inferido. Por lo tanto, en un escenario de uso independiente, la lista de inicialización puede considerarse como una matriz literal. Esto evita tener que declarar elementos que sólo se van a utilizarse en casos limitados, como llamadas a métodos individuales.
Figura 5 diferentes valores predeterminados utilizados como argumentos de llamada
Module Module1
Sub InitializeMethod(ByVal x As String())
'....
End Sub
Sub Main()
Dim i As Integer = 1
Select Case I
Case 1
Dim Array1 As String() = {"Item1", "Item2"}
InitializeMethod(Array1)
Case 2
Dim Array1 As String() = {"Item11", "Item12"}
InitializeMethod(Array1)
End Select
End Sub
End Module
Utilizar con otras características de 2010
Una de las características de la versión de 2010 del producto es dirigido a varios. Aunque esta característica existía en la versión de 2008, se han realizado algunas mejoras que permiten a muchas de las características del lenguaje en la versión del producto para usarse en versiones dirigido hacia abajo en 2010 (2.0, 3.0 y 3.5 destinos). Por lo tanto, se puede utilizar esta funcionalidad mejorada para la colección y los inicializadores de matriz para las aplicaciones existentes si estás utilizando la versión de 2010 del producto. Esto permite simplificar el código fuente existente y beneficiarse de la nueva funcionalidad de idioma.
¿Por lo tanto, cuando se utiliza esta nueva funcionalidad, allí es posibilidad de interrumpir el código existente? La respuesta es Sí, hay algunas posibilidades de saltos de compatibilidad con versiones anteriores, pero está limitado a unos pocos escenarios donde las ventajas compensan el cambio de hora original y puede conservarse fácilmente la funcionalidad existente:
Dim x1() = {1, 2, 3}
En versiones anteriores, la línea de código anterior se habría ocasionado en una matriz Object, pero con 2010 de Visual Studio, esto será tipo deduce el tipo principal de los elementos, en este caso Integer(). Éste será el caso independientemente de si se establece como destino 4.0 o dirige hacia abajo a una versión anterior. Si dispone de código que está esperando un tipo específico de la matriz de objetos, puede fallar este código. Fácilmente se pueden corregir especificando explícitamente el tipo de destino:
Dim x1() As Object = {1, 2, 3}
La excepción a este comportamiento se produce si no hay ningún tipo dominante para los elementos:
Dim x1() = {1, 2.2, "test"}
Esto conservará el comportamiento anterior, lo que una matriz de objetos x 1.
Aplicación fácil
Inicializadores de colección son una excelente adición al idioma. Permiten una sintaxis más concisa para inicializar framework y tipos de colección definida por el usuario. Con cambios mínimos, esta sintaxis puede aplicarse fácilmente a código existente.
La funcionalidad es ideal para poder utilizar otras características de lenguaje, como métodos de extensión, habilitar la reducción del uso de sintaxis para los tipos de colección. Esta reducción en el código repetitivo utilizado anteriormente hace que el código más pequeños y fáciles de mantener.
El comportamiento de inicializador de matriz ha cambiado ligeramente, lo que implementar la inferencia de tipo de matriz y la funcionalidad mejorada, permitiendo el uso independiente de matrices y ha mejorado la capacidad de inicializar matrices multidimensionales y escalonadas con respecto a versiones anteriores.
Prácticamente cada aplicación utiliza matrices o colecciones y esta característica pueden utilizarse en casi cualquier proyecto.
Adrian Spotty Bowles ha desarrollado con cada versión de Visual Basic y ha administrado buscar su forma de Redmond, Washington, donde trabaja en el equipo de producto de Visual Basic como un evaluador de ingeniero de diseño de software centrado en el compilador de Visual Basic. Durante el lanzamiento de Visual Basic 2008, trabajó en muchas de las características del lenguaje, incluyendo Methods.You de extensión puede llegar a Bowles en de Abowles@microsoft.com.