3

ジェネリック拡張メソッドを呼び出すことができることを知っています

public static object Convert<U>(this U value) 

このように(必須ではありませ<Class1>ん):

Class1Instance.Convert()

しかし、呼び出す方法はありますか:

public static T Convert<U, T>(this U value) 
  where T : Class1, Interface1, new()
  where U : Class1, Interface2, new()
{
  /******/
}

Class1Instance.Convert<Class2>()代わりに「のみ」を使用Class1Instance.Convert<Class1, Class2>()

ありがとう、

編集 :

再定式化/簡素化:持つ方法はありますか:

Result result = Convert<Result>(input); 

入力タイプの入力を知っている場合、言う必要はありません

Result result = Convert<Input, Result>(input)

次のような拡張メソッドを使用します。

static TResult Convert<TResult, TInput>(this TInput Input)
4

2 に答える 2

2

呼び出しコードでConvert<U, T>指定して呼び出す方法はありません。Convert<Class2>ただし、実際に呼び出し元のコードをそのように見せたい場合は、可能性があります。

public static T Convert<T>(this Class1 value) 
  where T : Class1, IClass1, new()
{ ... }

入力タイプを総称する代わりに、入力タイプの親クラスを指定するだけです。これにより、必要な呼び出しコードが得られますが、メソッドがより複雑になります。たとえば、変換プロセスに新しいUオブジェクトの作成(new()古いメソッド定義の汎用制約を使用)が含まれる場合は、新しいメソッドでのリフレクションを使用して行う必要があります。

于 2012-09-24T17:15:44.970 に答える
0

この投稿によると、ジェネリックパラメーターの推論は入力パラメーターでのみ機能します。私の場合、ジェネリックパラメーターの1つはリターン型です。

ジェネリック型の推論はそれらすべてを提供する必要があるため、各パラメーターを明示的に指定する必要があります。

于 2012-09-25T07:11:40.983 に答える