Se requiere una expresión constante

Una Const instrucción no inicializa correctamente una constante, una declaración de matriz usa una variable para especificar el número de elementos o está intentando inicializar una matriz como valor predeterminado para un parámetro opcional.

Identificador de error: BC30059

Para corregir este error

  • Si la declaración es una Const instrucción , compruebe para asegurarse de que la constante se inicializa con un literal, una constante declarada previamente, un miembro de enumeración o una combinación de literales, constantes y miembros de enumeración combinados con operadores.

  • Si la declaración especifica una matriz, compruebe si se usa una variable para especificar el número de elementos. Si es así, reemplace la variable por una expresión constante.

  • Si intenta inicializar una matriz como valor predeterminado para un parámetro opcional, use uno de los enfoques alternativos descritos en la sección Inicialización de matriz en parámetros opcionales .

  • Si las comprobaciones anteriores no solucionan el problema, pruebe a establecer en Const un valor temporal diferente, ejecute el programa y, a continuación, restablezca el Const valor deseado.

Inicialización de matriz en parámetros opcionales

No se puede inicializar una matriz como valor predeterminado para un parámetro opcional porque la inicialización de matriz no es una expresión constante. El código siguiente genera BC30059:

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

Solución 1: Usar ParamArray en lugar de Opcional

Si necesita aceptar un número variable de argumentos, considere la posibilidad de usar ParamArray en lugar de un parámetro opcional:

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

Solución 2: Usar Nothing como valor predeterminado e inicializar en el cuerpo del método

Establezca el valor Nothing predeterminado en y compruébalo en el método :

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

Solución 3: Proporcionar una sobrecarga sin el parámetro

Cree una versión sobrecargada del método que no requiera el parámetro :

' 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

Consulte también