A expressão constante é necessária

Uma Const instrução não inicializa corretamente uma constante, uma declaração de matriz usa uma variável para especificar o número de elementos ou você está tentando inicializar uma matriz como o valor padrão para um parâmetro opcional.

ID do erro: BC30059

Para corrigir este erro

  • Se a declaração for uma Const instrução, verifique se a constante é inicializada com um literal, uma constante declarada anteriormente, um membro de enumeração ou uma combinação de literais, constantes e membros de enumeração combinados com operadores.

  • Se a declaração especificar uma matriz, verifique se uma variável está sendo usada para especificar o número de elementos. Nesse caso, substitua a variável por uma expressão constante.

  • Se você estiver tentando inicializar uma matriz como o valor padrão para um parâmetro opcional, use uma das abordagens alternativas descritas na inicialização de Matriz na seção de parâmetros opcionais .

  • Se as verificações anteriores não resolverem o problema, tente definir como Const um valor temporário diferente, executar o programa e redefinir o Const valor desejado.

Inicialização de matriz em parâmetros opcionais

Você não pode inicializar uma matriz como o valor padrão para um parâmetro opcional porque a inicialização da matriz não é uma expressão constante. O código a seguir gera BC30059:

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

Solução 1: usar ParamArray em vez de opcional

Se você precisar aceitar um número variável de argumentos, considere usar ParamArray em vez de um 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"))

Solução 2: Usar Nada como padrão e inicializar no corpo do método

Defina o valor Nothing padrão para e verifique se ele está em seu 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")})

Solução 3: Fornecer uma sobrecarga sem o parâmetro

Crie uma versão sobrecarregada do método que não exija o 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 também