拡張メソッド '<methodname>' に、満たされる可能性のない型制約があります

更新 : 2007 年 11 月

このメソッドの型パラメータの相互の関連によって、制約が決して満たされない状態になっています。以下の拡張メソッドはその例です。

'' Not valid.
'<Extension()> _
'Sub extensionExample(Of T As U, U)(ByVal para1 As T, ByVal para2 As U)
'End Sub

このメソッドは拡張メソッドなので、コンパイラは、メソッド宣言の最初のパラメータ para1 とそのパラメータに渡される引数だけに基づいて、このメソッドの拡張対象になっているデータ型を判別する必要があります。最初のパラメータがジェネリック型パラメータ para1 as T を参照している場合は、そのジェネリック パラメータに設定されている制約によって、メソッドの対象になる型のセットが限定されます。

以下のコードでは、拡張メソッドの対象は、最初のパラメータ arg1 に指定されている引数から判別されます。

'' Not valid.

'arg1.extensionExample(arg2)

ここで必要なのは、最初のパラメータ para1 で参照されているすべてのジェネリック型パラメータの制約を、最初の引数 arg1 だけで判別できるようにすることです。extensionExample では、拡張する型のセットを最初のパラメータだけで判別することができません。型パラメータ T は型パラメータ U によって制約されていますが、型パラメータ U は para1 で参照されていないので、arg1 から推論することができません。したがって、このメソッドの対象になる型を確認できないので、このメソッドを呼び出すことが不可能な状態になっています。

エラー ID: BC36561

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

  • 型宣言を変更して、型どうしの相互依存の状態を解消します。

参照

概念

拡張メソッド (Visual Basic)

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