'<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 におけるジェネリック プロシージャ