Partager via


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 la déclaration de procédure spécifiée. Lorsque 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. Vous n’êtes pas obligé de connaître le nombre d’éléments dans le tableau de paramètres lorsque vous définissez la procédure. La taille du tableau est déterminée individuellement à 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 et doit être le dernier paramètre de la définition de procédure.

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

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

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

Appel d’un ParamArray

Lorsque vous appelez une procédure qui définit un tableau de paramètres, vous pouvez fournir l’argument de l’une des manières suivantes :

  • Rien, c’est-à-dire que vous pouvez omettre l’argument ParamArray . Dans ce cas, un tableau vide est passé à la procédure. Si vous transmettez explicitement le mot clé Nothing , un tableau Null est passé à la procédure et peut entraîner une exception NullReferenceException si la procédure appelée ne vérifie pas cette condition.

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

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

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

Importante

Chaque fois que vous traitez un tableau qui peut être indéfiniment volumineux, il existe un risque de dépasser une limite interne de votre application. Si vous acceptez un tableau de paramètres, vous devez tester la taille du tableau que le code appelant lui a passé. Prenez les mesures nécessaires si sa taille est trop grande pour votre application. Pour plus d’informations, consultez Tableaux.

Exemple :

L’exemple suivant définit et appelle la fonction calcSum. Le ParamArray modificateur 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 et génère 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