Recherche…


Remarques

Dim myArray(2) As Integer

someFunc(myArray)

Un tableau est une collection d'objets classés par index. Le type d'objet est défini par le type indiqué dans la déclaration de tableau.

Les tableaux dans Visual Basic .NET sont le plus souvent (et par défaut) zéro (0), ce qui signifie que le premier index est 0. Un tableau de 10 éléments aura une plage d'index de 0 à 9. Lors de l'accès à des éléments de tableau, l'index maximal accessible est inférieur à celui du nombre total d'éléments. De ce fait, les boucles qui accèdent de manière incrémentielle aux index de tableau doivent toujours effectuer une vérification de plage où la valeur est inférieure à la longueur du tableau.

Définition de tableau

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).

Base zéro

Tous les tableaux de VB.NET sont basés sur zéro. En d'autres termes, l'index du premier élément (la limite inférieure) dans un tableau VB.NET est toujours 0 . Les anciennes versions de VB, telles que VB6 et VBA, étaient basées sur une base par défaut, mais elles permettaient de remplacer les limites par défaut. Dans les versions antérieures de VB, les limites inférieure et supérieure pouvaient être explicitement définies (par exemple, Dim array(5 To 10) . Dans VB.NET, afin de maintenir la compatibilité avec les autres langages .NET, cette flexibilité était supprimée et la limite inférieure de 0 est maintenant toujours appliqué.Toutefois, la syntaxe To peut toujours être utilisée dans VB.NET, ce qui peut rendre la plage plus claire: par exemple, les exemples suivants sont tous équivalents à ceux énumérés ci-dessus:

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)

Déclarations de tableaux imbriqués

Dim myArray = {{1, 2}, {3, 4}}

Déclarez un tableau à une seule dimension et définissez les valeurs des éléments du tableau

Dim array = New Integer() {1, 2, 3, 4}

ou

Dim array As Int32() = {1, 2, 3, 4}

Initialisation du tableau

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.

Initialisation du tableau multidimensionnel

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

Initialisation des tableaux dentelés

Notez la parenthèse pour faire la distinction entre un tableau irrégulier et un tableau multidimensionnel. SubArrays peut être de longueur différente

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

Variables de tableau nul

Les tableaux étant des types de référence, une variable de tableau peut être nulle. Pour déclarer une variable de tableau nul, vous devez la déclarer sans taille:

Dim array() As Integer

Ou

Dim array As Integer()

Pour vérifier si un tableau est nul, testez pour voir s'il Is Nothing :

Dim array() As Integer
If array Is Nothing Then
    array = {1, 2, 3}
End If

Pour définir une variable de tableau existante sur null, définissez-la simplement sur Nothing :

Dim array() As Integer = {1, 2, 3}
array = Nothing
Console.WriteLine(array(0))  ' Throws a NullReferenceException

Ou utilisez Erase , qui fait la même chose:

Dim array() As Integer = {1, 2, 3}
Erase array
Console.WriteLine(array(0))  ' Throws a NullReferenceException

Référencement du même tableau à partir de deux variables

Les tableaux étant des types de référence, il est possible d'avoir plusieurs variables pointant vers le même objet tableau.

Dim array1() As Integer = {1, 2, 3}
Dim array2() As Integer = array1
array1(0) = 4
Console.WriteLine(String.Join(", ", array2))  ' Writes "4, 2, 3"

Limites inférieures non nulles

Avec Option Strict On , bien que le .NET Framework permette la création de tableaux à dimension unique avec des limites inférieures à zéro, ils ne sont pas des "vecteurs" et ne sont donc pas compatibles avec les tableaux typés VB.NET. Cela signifie qu'ils ne peuvent être vus que sous forme de Array et ne peuvent donc pas utiliser des références de tableau (index) normales.

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

De même qu'en utilisant Option Strict Off , vous pouvez récupérer la syntaxe (index) en traitant le tableau comme un IList , mais ce n'est pas un tableau, vous ne pouvez donc pas utiliser LBound et UBound sur ce nom de variable (et vous) ne pas toujours éviter 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

Les tableaux de limites inférieures multidimensionnelles non nulles sont compatibles avec les tableaux typés multidimensionnels 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

Référence MSDN: Array.CreateInstance



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow