拡張メソッド '<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
このエラーを解決するには
- 型宣言を変更して、型どうしの相互依存の状態を解消します。