2009-03-12 8 views
5

Escribí esto - muy simple - la función, y luego me pregunto si VB tiene alguna funcionalidad precompilada para hacer esto, pero no pudo encontrar nada específico.VB.Net Inicializando una matriz sobre la marcha

Private Shared Function MakeArray(Of T)(ByVal ParamArray args() As T) As T() 
    Return args 
End Function 

No tanto para ser utilizado como

Dim someNames() as string = MakeArray("Hans", "Luke", "Lia") 

Debido a esto se puede hacer con

Dim someNames() as string = {"Hans", "Luke", "Lia"} 

Pero más como

public sub PrintNames(names() as string) 
    // print each name 
End Sub 

PrintNames(MakeArray("Hans", "Luke", "Lia")) 

¿Alguna idea?

Respuesta

15

algún motivo no se debe hacer:

Dim someNames() as string = New String()("Han", "Luke", "Leia") 

La única diferencia es la inferencia de tipos, por lo que yo puedo decir.

He acaba de comprobar, y VB 9 tiene implicitly typed arrays también:

Dim someNames() as string = { "Han", "Luke", "Leia" } 

(esto no funcionaría en VB 8 por lo que yo sé, pero la versión explícita sería la versión implícita es necesario. para los tipos anónimos, que también son nuevos en VB) 9.

+0

Excelente, primer ejemplo es exactamente lo que estaba buscando. Gracias. –

+2

Creo que todos podemos estar de acuerdo en que lo más importante aquí es la ortografía correcta de "Han" :) – Andy

+0

@Andy mal, es el orden en el que aparecen .... debe ser "Luke", "Han", y luego "Leia" ... porque todos sabemos que Han y Leia pertenecen más cerca y no están separadas por su hermano;) – GoldBishop

6
Dim somenames() As String = {"hello", "world"} 
1
PrintNames(New String(){"Hans", "Luke", "Lia"}) 
1

Microsoft recomienda el siguiente formato

Dim mixedTypes As Object() = New Object() {item1, item2, itemn} 

por http://msdn.microsoft.com/en-US/library/8k8021te(v=VS.80).aspx

Nota, que no tiene que especificar el tamaño de la nueva matriz, como que se infiere a partir del recuento de argumentos inicializado. Si desea especificar la longitud, no especifica la "longitud" sino el número de índice del último espacio en la matriz. es decir. Nuevo objeto (2) {0, 1, 2} 'nota 3 args.

+0

Este es el formato de declaración explícita, sugerido por MS. El formato implícito es sin la clase 'Objeto' definida y asumida. PERO, si tiene 'Option Explicit' establecido, entonces TIENE que tener' Object' definido en la declaración. – GoldBishop

Cuestiones relacionadas