¿Cuál es la diferencia entre Dim v As String () y Dim v () As String?

Esto puede sonar trivial, pero ¿cuál es la diferencia entre Dim v As String () y Dim v () As String en VB.NET?

Ninguna diferencia. De la especificación de lenguaje VB.NET en matrices :

Los tipos de matriz se especifican agregando un modificador a un nombre de tipo existente. El modificador consiste en un paréntesis izquierdo, un conjunto de cero o más comas, y un paréntesis derecho.

También se puede declarar que una variable es de un tipo de matriz al poner un modificador de tipo de matriz o un modificador de inicialización de matriz en el nombre de la variable . En ese caso, el tipo de elemento de matriz es el tipo dado en la statement, y las dimensiones de la matriz están determinadas por el modificador de nombre de variable. Para mayor claridad, no es válido tener un modificador de tipo de matriz tanto en un nombre de variable como en un nombre de tipo en la misma statement .

Originalmente, en Basic, tenía que definir matrices, pero no variables. Y los tipos de variables se definieron por un carácter de sufijo: A $ era una cadena, mientras que A% era un número entero y A # era de doble precisión. (y los tres eran distintos y se podían usar al mismo tiempo) (Para la precisión simple, se podía usar A !, pero ese era el valor predeterminado si se usaba A)

Finalmente, los progtwigdores se dieron cuenta de que esas eran opciones de diseño increíblemente malas.

Para rectificar esto, Microsoft agregó “Option Explicit” que requería predefinir cada variable. Para disminuir el efecto en el lenguaje, secuestran el comando “DIM”, que se usó para definir matrices, para definir también variables escalares.

Así que originalmente:

  DIM A(50) ' define 51-element single-precision array 

Entonces

  DIM A(50) ' define 51-element single-precision array DIM A$ ' define a string 

Luego, para deshacerse de los sufijos, agregaron la syntax “As {type}”

  DIM A(50) ' define 51-element single-precision array DIM B as String DIM C(50) as String ' define 51-element string array. 

Luego hicieron que el tamaño de la matriz sea variable.

  DIM A() ' define single-precision array DIM B as String DIM C() as String ' define string array. 

Esto dejó un conflicto en el estilo de definición, por lo que permitieron ambos:

  DIM A() ' define single-precision array DIM B as String DIM C() as String ' define string array. DIM D as String() ' define string array. 

No hay diferencia.

Tanto Dim v As String() como Dim v() As String crearán una matriz de cadenas

Tradicionalmente, en Basic, pondría el paréntesis después del nombre de la variable. En VB.Net está permitido ponerlos después del tipo en su lugar si lo desea. El resultado es el mismo, por lo tanto, no hay diferencia con la syntax. Sin embargo, el motivo de esta adición es porque puedes construir una matriz. Considera el siguiente código:

  Public Sub MethodThatExpectsAnArray(ByVal arr() As String) '... End Sub Public Sub Main() Me.MethodThatExpectsAnArray(New String() {"Hello", "World"}) End Sub 

En la llamada, construyo la matriz “sobre la marcha” sin ninguna asignación, excepto directamente al argumento del método. Como aquí no hay ninguna variable, debo configurar la paranthesis después del tipo. Para permitir esta syntax, Microsoft tuvo la opción de cambiar la forma tradicional en que declaras las matrices en Basic o permitir ambas syntax. Por supuesto, optaron por lo último.

No hay diferencia.

Es principalmente semántica. La primera se lee como create variable "v" of type string array y la 2da lee como create array "v" of type string . De cualquier manera, el resultado es la misma matriz de cadenas.

No hay diferencia en el significado de los dos.

Si desea declarar varias variables en una statement dim, la segunda forma proporciona más flexibilidad: dim v (), v2 como cadena le permite declarar tipos de matriz y no matriz en la misma statement.