Tableaux de paramètres (Visual Basic)

En règle générale, vous ne pouvez pas appeler une procédure avec plus d’arguments que ce que la déclaration de la procédure spécifie. Si vous avez besoin d’un nombre indéfini d’arguments, vous pouvez déclarer un tableau de paramètres, ce qui permet à une procédure d’accepter un tableau de valeurs pour un paramètre. Au moment où vous définissez la procédure, il n’est pas nécessaire de connaître le nombre d’éléments dans le tableau de paramètres. La taille du tableau est déterminée individuellement par chaque appel de la procédure.

Déclaration d’un ParamArray

Vous utilisez le mot clé ParamArray pour désigner un tableau de paramètres dans la liste des paramètres. Les règles suivantes s’appliquent :

  • Une procédure ne peut définir qu’un seul tableau de paramètres, qui doit être le dernier paramètre dans la définition de la procédure.

  • Le tableau de paramètres doit être passé par valeur. Il est recommandé d’inclure explicitement le mot clé ByVal dans la définition de la procédure.

  • Le tableau de paramètres est automatiquement facultatif. Sa valeur par défaut est un tableau unidimensionnel vide qui a le type d’élément du tableau de paramètres.

  • Tous les paramètres précédant le tableau de paramètres doivent être obligatoires. Le tableau de paramètres doit être le seul paramètre facultatif.

Appel d’un ParamArray

Quand vous appelez une procédure qui définit un tableau de paramètres, vous pouvez fournir l’argument en utilisant au choix :

  • Le mot clé Nothing : vous pouvez alors omettre l’argument ParamArray. Dans ce cas, un tableau vide est passé à la procédure. Si vous passez explicitement le mot clé Nothing, un tableau Null est passé à la procédure, ce qui peut provoquer une exception NullReferenceException si la procédure appelée ne vérifie pas cette condition.

  • Une liste d’un nombre arbitraire d’arguments, séparés par des virgules. Le type de données de chaque argument doit être implicitement convertible en type d’élément ParamArray.

  • Un tableau avec le même type d’élément que celui du tableau de paramètres.

Dans tous les cas, le code dans la procédure traite le tableau de paramètres comme un tableau unidimensionnel contenant des éléments du même type de données que le type de données ParamArray.

Important

Chaque fois que vous traitez avec un tableau qui peut être indéfiniment volumineux, il existe un risque de dépassement d’une capacité interne de votre application. Si vous acceptez un tableau de paramètres, vous devez vérifier la taille du tableau que le code appelant lui a passé. Prenez les mesures appropriées si le tableau est trop volumineux pour votre application. Pour plus d’informations, consultez Tableaux.

Exemple

L’exemple suivant définit et appelle la fonction calcSum. Le modificateur ParamArray du paramètre args permet à la fonction d’accepter un nombre variable d’arguments.

Module Module1

    Sub Main()
        ' In the following function call, CalcSum's local variables
        ' are assigned the following values: args(0) = 4, args(1) = 3,
        ' and so on. The displayed sum is 10.
        Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
        Console.WriteLine("Sum: " & returnedValue)
        ' Parameter args accepts zero or more arguments. The sum
        ' displayed by the following statements is 0.
        returnedValue = CalcSum()
        Console.WriteLine("Sum: " & returnedValue)
    End Sub

    Public Function CalcSum(ByVal ParamArray args() As Double) As Double
        CalcSum = 0
        If args.Length <= 0 Then Exit Function
        For i As Integer = 0 To UBound(args, 1)
            CalcSum += args(i)
        Next i
    End Function

End Module

L’exemple suivant définit une procédure avec un tableau de paramètres, puis retourne les valeurs de tous les éléments de tableau passés au tableau de paramètres.

Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
    Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
    ' Use UBound to determine largest subscript of the array.
    For i As Integer = 0 To UBound(scores, 1)
        Debug.WriteLine("Score " & i & ": " & scores(i))
    Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

Voir aussi