VB.NETでメソッドを作成していると、引数を複数受け取りたいケースがあります。
そのような場合に、ParamArray(パラメーター配列)を使用すると、呼び出し側は配列を意識せずに複数の値を渡せるようになり、メソッド内部では配列として受け取れます。
この記事では、VB.NETのメソッドの引数を配列として受け取りたい場合に利用する ParamArray の基本的な使い方と、実務での活用例を紹介します。

ParamArray(パラメーター配列)とは

ParamArray(パラメーター配列)は、複数の引数を配列として受け取るためのキーワードです。
通常の配列引数では、呼び出し側で配列を作成して渡す必要がありますが、ParamArray を使用すると、複数の値をカンマ区切りで指定できます。

通常の配列引数は、呼び出し時に配列を作成して渡します。

Sub PrintMessages(messages() As String)

End Sub

PrintMessages({"A", "B", "C"})


一方、ParamArray を使用すると、呼び出し側で配列を意識する必要がありません。

Sub PrintMessages(ParamArray messages() As String)

End Sub

PrintMessages("A")
PrintMessages("A", "B")
PrintMessages("A", "B", "C")



実務でよくある使い方

ログ出力

以下は、ログ出力の例です。

Sub WriteLog(ParamArray messages() As String)

    Console.WriteLine(String.Join(" | ", messages))

End Sub

呼び出し側

LogWrite("処理開始")
LogWrite("ユーザーID:1001", "ログイン成功")
LogWrite("データ更新", "正常終了")

実行結果

処理開始
ユーザーID:1001 | ログイン成功
データ更新 | 正常終了            


SQL文の生成

以下は、SQL文のWHERE句を組み立てる例です。

Function CreateSQL(ParamArray conditions() As String) As String

    If conditions.Length = 0 Then
        Return String.Empty
    End If

    Return " AND " & String.Join(" AND ", conditions)

End Function

呼び出し側

Dim strSQL As String
Dim strWhere As String

strSQL = "SELECT * FROM emptbl WHERE 1 = 1"

strWhere = CreateSQL(
                "DelFlg = 0",
                "Status = 1",
                "Price > 1000"
            )

strSQL &= strWhere

Console.WriteLine(strSQL)

実行結果

SELECT * FROM emptbl WHERE 1 = 1 AND DelFlg = 0 AND Status = 1 AND Price > 1000



まとめ

ParamArrayを使用すると、呼び出し元は配列を明示的に作成する必要がなく、可変個の引数を自然なメソッド呼び出し形式で渡せます。
メソッド内部では通常の配列として扱われるため、柔軟で簡潔なプログラムが実装できます。


以上、VB.NETのメソッドの引数を配列として受け取りたい場合に利用する ParamArray の基本的な使い方と、実務での活用例について解説しました。