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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow