'<ジェネリック プロシージャ シグネチャ>' の型パラメーター '<型パラメーター名 1>' に対する型引数の推定に失敗しました。 パラメーター '<パラメーター名 1>' に渡される引数から推論される型引数が、パラメーター '<パラメーター名 2>' に渡される引数から推論される型引数と競合します。
ジェネリック プロシージャが型引数を指定せずに呼び出されており、型の推定によって、型パラメーターの間で競合するデータ型が生成されています。
通常、ジェネリック プロシージャを呼び出す場合は、ジェネリック プロシージャで定義する型パラメーターごとに型引数を指定します。 型引数を指定しない場合、コンパイラは型パラメーターに渡す型を推定しようとします。 呼び出しのコンテキストから型パラメーターについて競合するデータ型情報が提供される場合、型の推定は失敗します。
次のコードでは、このエラーが生成される可能性があります。
Public Sub takeTwoValues(Of t)(ByVal x As t, ByVal y As t)
End Sub
Call takeTwoValues(4, 2.5)
コンパイラは、最初の引数から型パラメーター Integer に対して tを推論しますが、2 番目の引数では同じ型パラメーターに対して Double を推論するため、 tに渡すデータ型に関して競合が発生します。
エラー 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)
関連項目
.NET