2008-09-04 39 views
40

¿Cómo puedo crear una matriz de cadenas unidimensional vacío?VB.NET matriz de cadenas vacío

+0

@Pacane favor [leer esto] (http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their -títulos). –

Respuesta

29

Dim strEmpty (-1) como secuencia

+7

Votación positiva porque es correcta. Sin embargo, para mayor claridad, prefiero Dim strEmpty() As String = New String() {} como Mark ofrece y SoMoS respalda. Sin embargo, Mark describe dos técnicas que no son equivalentes ... vea ese comentario. –

+9

Actualizar ... Encontramos lo siguiente para ser equivalente y tiene menos ceremonias: Dim myArray() = New String() {} –

+7

Eso está en la parte superior 10 de la sintaxis más fea que vi en mi vida; =) –

1

No sé por qué te gustaría, pero el C# forma sería

string[] newArray = new string[0]; 

supongo que VB no será muy diferente a este.

Si usted está construyendo una matriz vacía para que pueda rellenarlo con los valores más tarde, que realmente debería considerar el uso de

List<string> 

y convertirlo en una matriz (si realmente lo necesita como un array) con

newListOfString.ToArray(); 
6

Algo así como:

Dim myArray(9) as String 

le daría un conjunto de 10 cuerdas ref erences (cada uno apuntando a Nada).

Si no está seguro del tamaño en el momento de la declaración, se puede declarar una matriz de cadenas como esto:

Dim myArray() as String 

Y a continuación, se puede señalar que en una matriz de tamaño apropiado de cadenas más tarde:

ReDim myArray(9) as String 

ZombieSheep tiene razón sobre el uso de una lista si no conoce el tamaño total y necesita rellenarlo dinámicamente. En VB.NET que sería:

Dim myList as New List(Of String) 
myList.Add("foo") 
myList.Add("bar") 

Y a continuación, para obtener una matriz de esa lista:

myList.ToArray() 

@ Marcos

Gracias por la corrección.

0

FYI, tenga cuidado con ReDim -ing

Es un poco peligroso a veces. como goto

+1

¿De qué manera es 'ReDim' peligroso ? –

+0

@chakrit Redim funciona bien como operador goto. – GGSoft

6

La matriz que creó por Dim s (0) As Stringno está vacío

en VB.Net, el subíndice se utiliza en la matriz es el índice del último elemento. VB.Net por defecto comienza a indexar en 0, por lo que tiene una matriz que ya tiene un elemento.

Debería intentar usar System.Collections.Specialized.StringCollection o (incluso mejor) System.Collections.Generic.List(Of String). Suman casi lo mismo que una matriz de cadenas, excepto que son mucho mejores para agregar y eliminar elementos. Y seamos honestos: Rara vez se crea una matriz de cadenas vacío sin querer añadir al menos un elemento a la misma.

Si realmente desea una matriz de cadena vacía, declarar así:

Dim s As String() 

o

Dim t() As String 
+2

Joel, esto no proporciona el comportamiento solicitado. Cada uno de estos, t y s son Nada. YonahW quería una matriz vacía que proporciona la solución de GR8DA, aunque prefiero: Dim strEmpty() Como String = New String() {} –

35

VB es 0-indexed in array declarations, así como seomthing Dim myArray(10) as String le da elementos. Es un error común al traducir de los lenguajes C.

lo tanto, para una matriz vacía, cualquiera de los siguientes sería trabajar:

Dim str(-1) as String ' -1 + 1 = 0, so this has 0 elements 
Dim str() as String = New String() { } ' implicit size, initialized to empty 
+3

Siempre hago Dim str() como String = New String() {} porque creo que es la mejor manera de ver que es un conjunto de cadenas VACÍO "{}" –

+2

Marcar, Dim str (0) produce una matriz con una longitud de 1 con un NULL en el índice 0. El segundo, Dim str() ... {} produce una matriz vacía con una longitud de cero como YonahW quería. –

+0

@RandyEppinger es correcto (y lo ha sido durante los últimos 3 años ...). str (0) produce una matriz de longitud 1 (siendo 0-indexado significa que la longitud es +1 la declaración). Debería haber puesto str (-1) (que, cuando +1 te da una longitud de 0). –

3

Otra forma de hacer esto:

Dim strings() As String = {} 

Prueba de que es una matriz de cadenas vacío:

MessageBox.Show("count: " + strings.Count.ToString) 

Aparecerá un mensaje que indicará "count: 0".

6

No tiene que incluir String dos veces, y no tiene que usar Nuevo.
Cualquiera de las siguientes funcionará ...

Dim strings() as String = {} 
Dim strings as String() = {} 
Cuestiones relacionadas