Wyrażenie stałe jest wymagane

Instrukcja Const nie inicjuje poprawnie stałej, deklaracja tablicy używa zmiennej do określenia liczby elementów lub próbujesz zainicjować tablicę jako wartość domyślną opcjonalnego parametru.

Identyfikator błędu: BC30059

Aby naprawić ten błąd

  • Jeśli deklaracja jest instrukcją Const , sprawdź, czy stała jest inicjowana za pomocą literału, wcześniej zadeklarowanej stałej, składowej wyliczenia lub kombinacji literałów, stałych i składowych wyliczenia połączonych z operatorami.

  • Jeśli deklaracja określa tablicę, sprawdź, czy zmienna jest używana do określenia liczby elementów. Jeśli tak, zastąp zmienną wyrażeniem stałym.

  • Jeśli próbujesz zainicjować tablicę jako wartość domyślną dla opcjonalnego parametru, użyj jednej z alternatywnych metod opisanych w sekcji Inicjowanie tablicy w sekcji parametry opcjonalne .

  • Jeśli powyższe testy nie rozwiążą problemu, spróbuj ustawić Const inną wartość tymczasową, uruchomić program, a następnie zresetować Const wartość do żądanej wartości.

Inicjowanie tablicy w parametrach opcjonalnych

Nie można zainicjować tablicy jako wartości domyślnej opcjonalnego parametru, ponieważ inicjowanie tablicy nie jest wyrażeniem stałym. Poniższy kod generuje BC30059:

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

Rozwiązanie 1. Użyj narzędzia ParamArray zamiast opcjonalnego

Jeśli musisz zaakceptować zmienną liczbę argumentów, rozważ użycie ParamArray zamiast opcjonalnego 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"))

Rozwiązanie 2. Użyj wartości nic jako domyślnej i zainicjuj ją w treści metody

Ustaw wartość domyślną na Nothing i sprawdź ją w metodzie:

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

Rozwiązanie 3. Podawanie przeciążenia bez parametru

Utwórz przeciążoną wersję metody, która nie wymaga parametru:

' 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

Zobacz także