Condividi tramite


L'espressione costante è obbligatoria

Un'istruzione Const non inizializza correttamente una costante, una dichiarazione di matrice usa una variabile per specificare il numero di elementi oppure si sta tentando di inizializzare una matrice come valore predefinito per un parametro facoltativo.

ID errore: BC30059

Per correggere l'errore

  • Se la dichiarazione è un'istruzione Const , verificare che la costante sia inizializzata con un valore letterale, una costante dichiarata in precedenza, un membro di enumerazione o una combinazione di valori letterali, costanti e membri di enumerazione combinati con operatori.

  • Se la dichiarazione specifica una matrice, verificare se viene usata una variabile per specificare il numero di elementi. In tal caso, sostituire la variabile con un'espressione costante.

  • Se si sta tentando di inizializzare una matrice come valore predefinito per un parametro facoltativo, usare uno degli approcci alternativi descritti nella sezione Inizializzazione della matrice nella sezione Parametri facoltativi .

  • Se i controlli precedenti non risondono il problema, provare a impostare su Const un valore temporaneo diverso, eseguire il programma e quindi reimpostare il Const valore desiderato.

Inizializzazione della matrice nei parametri facoltativi

Non è possibile inizializzare una matrice come valore predefinito per un parametro facoltativo perché l'inizializzazione della matrice non è un'espressione costante. Il codice seguente genera BC30059:

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

Soluzione 1: Usare ParamArray invece di Facoltativo

Se è necessario accettare un numero variabile di argomenti, è consigliabile usare ParamArray anziché un parametro facoltativo:

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"))

Soluzione 2: Usare Nothing come impostazione predefinita e inizializzare nel corpo del metodo

Impostare il valore predefinito su Nothing e controllarlo nel metodo:

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")})

Soluzione 3: Fornire un overload senza il parametro

Creare una versione di overload del metodo che non richiede il parametro :

' 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

Vedere anche