Vyžaduje se konstantní výraz.

Příkaz Const neinicializuje konstantu správně, deklarace pole používá proměnnou k určení počtu prvků nebo se pokoušíte inicializovat pole jako výchozí hodnotu volitelného parametru.

ID chyby: BC30059

Oprava této chyby

  • Pokud je Const deklarace příkazem, zkontrolujte, zda je konstanta inicializována literálem, dříve deklarovanou konstantou, členem výčtu nebo kombinací literálů, konstant a členů výčtu v kombinaci s operátory.

  • Pokud deklarace určuje pole, zkontrolujte, jestli se k určení počtu prvků používá proměnná. Pokud ano, nahraďte proměnnou konstantním výrazem.

  • Pokud se pokoušíte inicializovat pole jako výchozí hodnotu volitelného parametru, použijte jeden z alternativních přístupů popsaných v inicializaci pole v oddílu volitelných parametrů .

  • Pokud předchozí kontroly problém nevyřeší, zkuste nastavit Const jinou dočasnou hodnotu, spustit program a potom resetovat Const požadovanou hodnotu.

Inicializace pole v volitelných parametrech

Pole nelze inicializovat jako výchozí hodnotu volitelného parametru, protože inicializace pole není konstantní výraz. Následující kód vygeneruje BC30059:

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

Řešení 1: Použití paramArray místo volitelného

Pokud potřebujete přijmout proměnný počet argumentů, zvažte použití ParamArray namísto volitelného parametru:

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

Řešení 2: Použití funkce Nothing jako výchozí a inicializace v těle metody

Nastavte výchozí hodnotu Nothing a zkontrolujte ji v metodě:

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

Řešení 3: Poskytnutí přetížení bez parametru

Vytvořte přetíženou verzi metody, která nevyžaduje parametr:

' 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

Viz také