Konstanter Ausdruck ist erforderlich

Eine Const Anweisung initialisiert keine Konstante ordnungsgemäß, eine Arraydeklaration verwendet eine Variable, um die Anzahl der Elemente anzugeben, oder Sie versuchen, ein Array als Standardwert für einen optionalen Parameter zu initialisieren.

Fehler-ID: BC30059

So beheben Sie diesen Fehler

  • Wenn es sich bei der Deklaration um eine Const Anweisung handelt, überprüfen Sie, ob die Konstante mit einem Literal, einer zuvor deklarierten Konstante, einem Enumerationsmember oder einer Kombination aus Literalen, Konstanten und Enumerationsmembern in Kombination mit Operatoren initialisiert wird.

  • Wenn die Deklaration ein Array angibt, überprüfen Sie, ob eine Variable verwendet wird, um die Anzahl der Elemente anzugeben. Ersetzen Sie in diesem Falls die Variable durch einen Konstantenausdruck.

  • Wenn Sie versuchen, ein Array als Standardwert für einen optionalen Parameter zu initialisieren, verwenden Sie einen der alternativen Ansätze, die im Abschnitt "Arrayinitialisierung" im Abschnitt mit optionalen Parametern beschrieben sind.

  • Wenn das Problem durch die vorstehenden Prüfungen nicht behoben wird, versuchen Sie, den Const Wert auf einen anderen temporären Wert festzulegen, führen Sie das Programm aus, und setzen Sie dann den Const gewünschten Wert zurück.

Arrayinitialisierung in optionalen Parametern

Sie können ein Array nicht als Standardwert für einen optionalen Parameter initialisieren, da die Arrayinitialisierung kein konstanter Ausdruck ist. Der folgende Code generiert BC30059:

' This causes BC30059
Public Function MyFun(Optional filters() As (String, String) = New (String, String)() {}) As Boolean
    ' Function body
End Function

Lösung 1: Verwenden von ParamArray anstelle von Optional

Wenn Sie eine variable Anzahl von Argumenten akzeptieren müssen, sollten Sie anstelle eines optionalen Parameters folgendes verwenden ParamArray :

Public Function MyFun(ParamArray filters() As (String, String)) As Boolean
    ' The ParamArray automatically provides an empty array if no arguments are passed
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

' Can be called with any number of arguments:
MyFun() ' Empty array
MyFun(("name", "value"))
MyFun(("name1", "value1"), ("name2", "value2"))

Lösung 2: Verwenden von Nothing als Standard und Initialisieren im Methodentext

Legen Sie den Standardwert fest, Nothing und überprüfen Sie ihn in Ihrer Methode:

Public Function MyFun(Optional filters() As (String, String) = Nothing) As Boolean
    If filters Is Nothing Then
        filters = New (String, String)() {}
    End If
    
    ' Process the filters array
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

' Can be called without arguments:
MyFun() ' Uses empty array
' Or with an array:
MyFun({("name", "value")})

Lösung 3: Bereitstellen einer Überladung ohne den Parameter

Erstellen Sie eine überladene Version der Methode, für die der Parameter nicht erforderlich ist:

' Overload without the parameter
Public Function MyFun() As Boolean
    Return MyFun(New (String, String)() {})
End Function

' Main method with required parameter
Public Function MyFun(filters() As (String, String)) As Boolean
    ' Process the filters array
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

Siehe auch