Visual Basic .NET Language
Array
Suche…
Bemerkungen
Dim myArray(2) As Integer
someFunc(myArray)
Ein Array ist eine nach Index geordnete Sammlung von Objekten. Der Objekttyp wird durch den in der Array-Deklaration angegebenen Typ definiert.
Arrays in Visual Basic .NET sind am häufigsten (und standardmäßig) null (0), was bedeutet, dass der erste Index 0 ist. Ein Array mit 10 Elementen hat einen Indexbereich von 0 bis 9. Beim Zugriff auf Array-Elemente ist der maximal zugreifbare Index um eins geringer als die Gesamtzahl der Elemente. Aus diesem Grund sollten Schleifen, die inkrementell auf Array-Indizes zugreifen, immer eine Bereichsüberprüfung durchführen, bei der der Wert kleiner als die Arraylänge ist.
Array-Definition
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).
Nullbasiert
Alle Arrays in VB.NET sind nullbasiert. Mit anderen Worten, der Index des ersten Elements (der unteren Grenze) in einem VB.NET-Array ist immer 0
. Ältere Versionen von VB, z. B. VB6 und VBA, waren standardmäßig einseitig, boten jedoch die Möglichkeit, die Standardgrenzen zu überschreiben. In diesen früheren Versionen von VB konnten die Unter- und Obergrenzen explizit angegeben werden (z. B. Dim array(5 To 10)
. In VB.NET wurde diese Flexibilität und die Untergrenze für die Kompatibilität mit anderen .NET-Sprachen aufgehoben Von 0
wird jetzt immer erzwungen, die To
Syntax kann jedoch weiterhin in VB.NET verwendet werden, wodurch der Bereich möglicherweise deutlicher wird. Die folgenden Beispiele entsprechen beispielsweise den oben aufgelisteten:
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)
Verschachtelte Array-Deklarationen
Dim myArray = {{1, 2}, {3, 4}}
Deklarieren Sie ein Single-Dimension-Array und legen Sie Array-Elementwerte fest
Dim array = New Integer() {1, 2, 3, 4}
oder
Dim array As Int32() = {1, 2, 3, 4}
Array-Initialisierung
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.
Multidimensionale Array-Initialisierung
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
Zackige Array-Initialisierung
Beachten Sie die Klammer, um zwischen einem gezackten und einem mehrdimensionalen Array zu unterscheiden
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-Variablen
Da Arrays Referenztypen sind, kann eine Arrayvariable null sein. Um eine Null-Array-Variable zu deklarieren, müssen Sie sie ohne Größe deklarieren:
Dim array() As Integer
Oder
Dim array As Integer()
Um zu überprüfen, ob ein Array null ist, testen Sie, ob es Is Nothing
:
Dim array() As Integer
If array Is Nothing Then
array = {1, 2, 3}
End If
Um eine vorhandene Array-Variable auf null zu setzen, setzen Sie sie einfach auf Nothing
:
Dim array() As Integer = {1, 2, 3}
array = Nothing
Console.WriteLine(array(0)) ' Throws a NullReferenceException
Oder verwenden Sie Erase
, was dasselbe bewirkt:
Dim array() As Integer = {1, 2, 3}
Erase array
Console.WriteLine(array(0)) ' Throws a NullReferenceException
Verweis auf dasselbe Array aus zwei Variablen
Da Arrays Referenztypen sind, können mehrere Variablen auf dasselbe Arrayobjekt verweisen.
Dim array1() As Integer = {1, 2, 3}
Dim array2() As Integer = array1
array1(0) = 4
Console.WriteLine(String.Join(", ", array2)) ' Writes "4, 2, 3"
Nicht-Null-Untergrenzen
Mit der Option Strict On
sind in .NET Framework zwar Single-Dimension-Arrays mit niedrigeren Grenzen als Null möglich, sie sind jedoch keine "Vektoren" und daher nicht mit VB.NET-Arrays kompatibel. Dies bedeutet, dass sie nur als Array
und daher keine normalen Array- (index)
Referenzen verwenden können.
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
Neben der Verwendung von Option Strict Off
können Sie die (index)
IList
zurückholen, indem Sie das Array als IList
behandeln. IList
handelt sich jedoch nicht um ein Array. LBound
können Sie LBound
und UBound
für diesen Variablennamen (und Sie 'verwenden). noch immer vermeiden Boxen nicht:)
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
Mehrdimensionale nicht-null-Arrays mit niedrigerer Begrenzung sind mit mehrdimensionalen VB.NET-Arrays kompatibel:
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
MSDN-Referenz: Array.CreateInstance