'<genericproceduresignature>' の型パラメータ '<typeparametername1>' に対して型引数を推論できませんでした。

更新 : 2007 年 11 月

エラー メッセージ

'<genericproceduresignature>' の型パラメータ '<typeparametername1>' に対して型引数を推論できませんでした。パラメータ '<parametername1>' に渡される引数から推論する型引数が、パラメータ '<parametername2>' に渡される引数から推論する型引数と競合しています。

ジェネリック プロシージャが型引数を指定せずに呼び出されており、型の推論によって型パラメータの間で競合するデータ型が生成されています。

通常、ジェネリック プロシージャを呼び出すときには、ジェネリック プロシージャに定義された各型パラメータに型引数を指定します。型引数を何も指定しなければ、コンパイラは型パラメータに渡される型の推論を試みます。呼び出しのコンテキストから型パラメータと競合するデータ型情報が得られた場合、型の推論はエラーになります。

このエラーは次のようなコードで発生します。

Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)

コンパイラは最初の引数から、型パラメータ t に対して Integer を推論しますが、2 番目の引数では同じ型パラメータに対して Double を推論するため、t に渡すデータ型に関して競合が生じます。

Error ID: BC32116

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

  • ジェネリック型に型引数を指定して、コンパイラが型を推論する必要がないようにします。

    Call takeTwoValues(Of Double)(4, 2.5)
    

    このケースでは、通常の 2 つの引数がそれぞれ異なるデータ型を持つため、呼び出し元のコードは両方のデータ型に適合する型引数を渡す必要があります。この例の場合で言えば、Integer は Double に拡大されます。

    または

  • ジェネリック プロシージャの定義を変更して、通常のパラメータに対して異なる型パラメータを指定し、型の推論による競合が発生しないようにします。

    Public Sub takeTwoValues(Of t1, t2)(ByVal x As t1, ByVal y As t2)
    

参照

概念

Visual Basic におけるジェネリック型

Visual Basic におけるジェネリック プロシージャ

参照

型リスト