Delen via


Constante expressie is vereist

Een Const instructie initialiseert een constante niet goed, een matrixdeclaratie maakt gebruik van een variabele om het aantal elementen op te geven of u probeert een matrix te initialiseren als de standaardwaarde voor een optionele parameter.

Fout-id: BC30059

Deze fout corrigeren

  • Als de declaratie een Const instructie is, controleert u of de constante wordt geïnitialiseerd met een letterlijke waarde, een eerder gedeclareerde constante, een opsommingslid of een combinatie van letterlijke, constanten en opsommingsleden in combinatie met operators.

  • Als in de declaratie een matrix wordt opgegeven, controleert u of een variabele wordt gebruikt om het aantal elementen op te geven. Vervang de variabele zo ja, door een constante expressie.

  • Als u een matrix wilt initialiseren als de standaardwaarde voor een optionele parameter, gebruikt u een van de alternatieve methoden die worden beschreven in de initialisatie van de matrix in de sectie optionele parameters .

  • Als de voorgaande controles het probleem niet verhelpen, kunt u proberen de Const waarde in te stellen op een andere tijdelijke waarde, het programma uit te voeren en vervolgens de Const gewenste waarde opnieuw in te stellen.

Initialisatie van matrix in optionele parameters

U kunt een matrix niet initialiseren als de standaardwaarde voor een optionele parameter, omdat de initialisatie van de matrix geen constante expressie is. Met de volgende code wordt BC30059 gegenereerd:

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

Oplossing 1: ParamArray gebruiken in plaats van Optioneel

Als u een variabel aantal argumenten wilt accepteren, kunt u overwegen in plaats van een optionele parameter te gebruiken 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"))

Oplossing 2: Niets als standaard gebruiken en initialiseren in de hoofdtekst van de methode

Stel de standaardwaarde Nothing in en controleer deze in uw 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")})

Oplossing 3: Een overbelasting zonder de parameter opgeven

Maak een overbelaste versie van de methode waarvoor de parameter niet is vereist:

' 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

Zie ook