次の方法で共有


定数式が必要です

Const ステートメントで定数が適切に初期化されない、配列宣言で変数を使用して要素の数を指定する、または省略可能なパラメーターの既定値として配列を初期化しようとしています。

エラー ID: BC30059

このエラーを解決するには

  • 宣言が Const ステートメントの場合は、定数がリテラル、以前に宣言された定数、列挙メンバー、またはリテラル、定数、および列挙型メンバーの組み合わせと演算子と組み合わせて初期化されていることを確認します。

  • 宣言で配列が指定されている場合は、要素の数を指定するために変数が使用されているかどうかを確認します。 その場合は、変数を定数式に置き換えます。

  • 省略可能なパラメーターの既定値として配列を初期化する場合は、「 省略可能 なパラメーターの配列の初期化」セクションで説明されている代替方法のいずれかを使用します。

  • 上記のチェックで問題が解決しない場合は、 Const を別の一時値に設定し、プログラムを実行してから、 Const を目的の値にリセットしてみてください。

省略可能なパラメーターでの配列の初期化

配列の初期化は定数式ではないため、省略可能なパラメーターの既定値として配列を初期化することはできません。 次のコードでは、BC30059が生成されます。

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

解決策 1: 省略可能ではなく ParamArray を使用する

可変数の引数を受け入れる必要がある場合は、省略可能なパラメーターの代わりに ParamArray を使用することを検討してください。

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

解決策 2: 既定として Nothing を使用し、メソッド本体で初期化する

既定値を Nothing に設定し、メソッドで確認します。

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

解決策 3: パラメーターを指定せずにオーバーロードを指定する

パラメーターを必要としないオーバーロードされたバージョンのメソッドを作成します。

' 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

こちらも参照ください