Dela via


Parametermatriser (Visual Basic)

Vanligtvis kan du inte anropa en procedur med fler argument än vad som anges i procedurdeklarationen. När du behöver ett obegränsat antal argument kan du deklarera en parametermatris, vilket gör att en procedur kan acceptera en matris med värden för en parameter. Du behöver inte känna till antalet element i parametermatrisen när du definierar proceduren. Matrisstorleken bestäms individuellt av varje anrop till proceduren.

Deklarera en ParamArray

Du använder nyckelordet ParamArray för att ange en parametermatris i parameterlistan. Följande regler gäller:

  • En procedur kan bara definiera en parametermatris och den måste vara den sista parametern i procedurdefinitionen.

  • Parametermatrisen måste skickas av värdet. Det är bra programmeringspraxis att uttryckligen inkludera nyckelordet ByVal i procedurdefinitionen.

  • Parametermatrisen är automatiskt valfri. Standardvärdet är en tom endimensionell matris av parametermatrisens elementtyp.

  • Alla parametrar som föregår parametermatrisen måste vara obligatoriska. Parametermatrisen måste vara den enda valfria parametern.

Anropa en ParamArray

När du anropar en procedur som definierar en parametermatris kan du ange argumentet på något av följande sätt:

  • Ingenting – det vill: du kan utelämna argumentet ParamArray . I det här fallet skickas en tom matris till proceduren. Om du uttryckligen skickar nyckelordet Ingenting skickas en null-matris till proceduren och kan resultera i en NullReferenceException om den anropade proceduren inte söker efter det här villkoret.

  • En lista över ett godtyckligt antal argument, avgränsade med kommatecken. Datatypen för varje argument måste implicit konverteras till ParamArray elementtypen.

  • En matris med samma elementtyp som parametermatrisens elementtyp.

I samtliga fall behandlar koden i proceduren parametermatrisen som en endimensionell matris med element av samma datatyp som ParamArray datatypen.

Viktigt!

När du hanterar en matris som kan vara obegränsad, finns det risk för att programmets interna kapacitet överskrids. Om du accepterar en parametermatris bör du testa storleken på matrisen som den anropande koden skickade till den. Vidta lämpliga åtgärder om det är för stort för ditt program. Mer information finns i Matriser.

Exempel

I följande exempel definieras och anropas funktionen calcSum. Med ParamArray modifieraren för parametern args kan funktionen acceptera ett variabelt antal argument.

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

I följande exempel definieras en procedur med en parametermatris och värdena för alla matriselement som skickas till parametermatrisen matas ut.

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)

Se även