Visual Basic .NET Language
schieramento
Ricerca…
Osservazioni
Dim myArray(2) As Integer
someFunc(myArray)
Una matrice è una raccolta di oggetti ordinata per indice. Il tipo di oggetto è definito dal tipo indicato nella dichiarazione dell'array.
Le matrici in Visual Basic .NET sono più comunemente (e per impostazione predefinita) basate su zero (0), il che significa che il primo indice è 0. Un array di 10 elementi avrà un intervallo di indice compreso tra 0 e 9. Quando si accede agli elementi dell'array, l'indice accessibile massimo è inferiore al numero totale di elementi. Per questo motivo, i cicli che accedono agli indici di array in modo incrementale dovrebbero sempre eseguire un controllo di intervallo in cui il valore è inferiore alla lunghezza dell'array.
Definizione di matrice
Dim array(9) As Integer ' Defines an array variable with 10 Integer elements (0-9).
Dim array = New Integer(10) {} ' Defines an array variable with 11 Integer elements (0-10)
'using New.
Dim array As Integer() = {1, 2, 3, 4} ' Defines an Integer array variable and populate it
'using an array literal. Populates the array with
'4 elements.
ReDim Preserve array(10) ' Redefines the size of an existing array variable preserving any
'existing values in the array. The array will now have 11 Integer
'elements (0-10).
ReDim array(10) ' Redefines the size of an existing array variable discarding any
'existing values in the array. The array will now have 11 Integer
'elements (0-10).
Zero-Based
Tutti gli array in VB.NET sono basati su zero. In altre parole, l'indice del primo elemento (il limite inferiore) in un array VB.NET è sempre 0
. Le versioni precedenti di VB, come VB6 e VBA, erano basate su una sola impostazione predefinita, ma fornivano un modo per ignorare i limiti predefiniti. In quelle versioni precedenti di VB, i limiti inferiore e superiore potevano essere dichiarati esplicitamente (es. Dim array(5 To 10)
.In VB.NET, per mantenere la compatibilità con altri linguaggi .NET, quella flessibilità era stata rimossa e il limite inferiore 0
viene ora sempre applicato. Tuttavia, la sintassi To
può ancora essere utilizzata in VB.NET, che può rendere l'intervallo più esplicitamente chiaro. Ad esempio, i seguenti esempi sono tutti equivalenti a quelli sopra elencati:
Dim array(0 To 9) As Integer
Dim array = New Integer(0 To 10) {}
ReDim Preserve array(0 To 10)
ReDim array(0 To 10)
Dichiarazioni di array annidati
Dim myArray = {{1, 2}, {3, 4}}
Dichiarare una matrice a dimensione singola e impostare i valori degli elementi dell'array
Dim array = New Integer() {1, 2, 3, 4}
o
Dim array As Int32() = {1, 2, 3, 4}
Inizializzazione di array
Dim array() As Integer = {2, 0, 1, 6} ''Initialize an array of four Integers.
Dim strings() As String = {"this", "is", "an", "array"} ''Initialize an array of four Strings.
Dim floats() As Single = {56.2, 55.633, 1.2, 5.7743, 22.345}
''Initialize an array of five Singles, which are the same as floats in C#.
Dim miscellaneous() as Object = { New Object(), "Hello", New List(of String) }
''Initialize an array of three references to any reference type objects
''and point them to objects of three different types.
Inizializzazione di array multidimensionali
Dim array2D(,) As Integer = {{1, 2, 3}, {4, 5, 6}}
' array2D(0, 0) is 1 ; array2D(0, 1) is 2 ; array2D(1, 0) is 4
Dim array3D(,,) As Integer = {{{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9}, {10, 11, 12}}}
' array3D(0, 0, 0) is 1 ; array3D(0, 0, 1) is 2
' array3D(0, 1, 0) is 4 ; array3D(1, 0, 0) is 7
Inizializzazione di Jagged Array
Nota la parentesi per distinguere tra una matrice frastagliata e una matrice multidimensionale I sottarray possono essere di lunghezza diversa
Dim jaggedArray()() As Integer = { ({1, 2, 3}), ({4, 5, 6}), ({7}) }
' jaggedArray(0) is {1, 2, 3} and so jaggedArray(0)(0) is 1
' jaggedArray(1) is {4, 5, 6} and so jaggedArray(1)(0) is 4
' jaggedArray(2) is {7} and so jaggedArray(2)(0) is 7
Null Array Variables
Poiché le matrici sono tipi di riferimento, una variabile di matrice può essere nullo. Per dichiarare una variabile di matrice nulla, devi dichiararla senza una dimensione:
Dim array() As Integer
O
Dim array As Integer()
Per verificare se un array è nullo, prova a vedere se non Is Nothing
:
Dim array() As Integer
If array Is Nothing Then
array = {1, 2, 3}
End If
Per impostare una variabile array esistente su null, è sufficiente impostarla su Nothing
:
Dim array() As Integer = {1, 2, 3}
array = Nothing
Console.WriteLine(array(0)) ' Throws a NullReferenceException
Oppure usa Erase
, che fa la stessa cosa:
Dim array() As Integer = {1, 2, 3}
Erase array
Console.WriteLine(array(0)) ' Throws a NullReferenceException
Riferimento alla stessa matrice da due variabili
Poiché gli array sono tipi di riferimento, è possibile avere più variabili che puntano allo stesso oggetto matrice.
Dim array1() As Integer = {1, 2, 3}
Dim array2() As Integer = array1
array1(0) = 4
Console.WriteLine(String.Join(", ", array2)) ' Writes "4, 2, 3"
Limiti inferiori diversi da zero
Con Option Strict On
, sebbene .NET Framework consenta la creazione di matrici a dimensione singola con limiti inferiori non zero, non sono "vettori" e quindi non sono compatibili con gli array tipizzati VB.NET. Ciò significa che possono essere visti solo come Array
e quindi non possono utilizzare riferimenti di array (index)
normali.
Dim a As Array = Array.CreateInstance(GetType(Integer), {4}, {-1})
For y = LBound(a) To UBound(a)
a.SetValue(y * y, y)
Next
For y = LBound(a) To UBound(a)
Console.WriteLine($"{y}: {a.GetValue(y)}")
Next
Oltre a utilizzare Option Strict Off
, puoi recuperare la sintassi (index)
trattando l'array come un IList
, ma non è un array, quindi non puoi usare LBound
e UBound
su quel nome di variabile (e tu? non stiamo ancora evitando la boxe):
Dim nsz As IList = a
For y = LBound(a) To UBound(a)
nsz(y) = 2 - CInt(nsz(y))
Next
For y = LBound(a) To UBound(a)
Console.WriteLine($"{y}: {nsz(y)}")
Next
Le matrici con limite inferiore non-zero multidimensionale sono compatibili con gli array tipografici multidimensionali VB.NET:
Dim nza(,) As Integer = DirectCast(Array.CreateInstance(GetType(Integer),
{4, 3}, {1, -1}), Integer(,))
For y = LBound(nza) To UBound(nza)
For w = LBound(nza, 2) To UBound(nza, 2)
nza(y, w) = -y * w + nza(UBound(nza) - y + LBound(nza),
UBound(nza, 2) - w + LBound(nza, 2))
Next
Next
For y = LBound(nza) To UBound(nza)
Dim ly = y
Console.WriteLine(String.Join(" ",
Enumerable.Repeat(ly & ":", 1).Concat(
Enumerable.Range(LBound(nza, 2), UBound(nza, 2) - LBound(nza, 2) + 1) _
.Select(Function(w) CStr(nza(ly, w))))))
Next
Riferimento MSDN: Array.CreateInstance