1

独自のIExportableインターフェースを定義し、それを次のように使用します

public static A SomeAction<B>(IList<T> data) where T : IExportable
{
    var tType = typeof(T);
    IList<B> BLists = SomeMethod(tType);
    //...
} 

つまりSomeMethod:

List<B> SomeMethod(IExportable exportData)
{
   // do somethings
}

しかし、アプリケーションを実行すると、次のエラーが発生します。

SomeMethod(IExportable) has some invalid arguments cannot convert 'System.Type' to 'IFileExport'
に最適なオーバーロードされたメソッドの一致はどこですか?

4

1 に答える 1

1

typeof(T)によって表されるクラスに関するメタ情報を持つTypeオブジェクトを返しますTSomeMethodは拡張するオブジェクトを探しているIExportableので、おそらく拡張するオブジェクトを作成する必要がTありますIExportable。これを行うには、いくつかのオプションがあります。最も簡単なオプションはnew、ジェネリック パラメータに制約を追加し、Tのデフォルト コンストラクタを使用することです。

//Notice that I've added the generic paramters A and T.  It looks like you may 
//have missed adding those parameters or you have specified too many types.
public static A SomeAction<A, B, T>(IList<T> data) where T : IExportable, new()
{
    T tType = new T();
    IList<B> BLists = SomeMethod(tType);
    //...
} 

tTypeコードで何が起こっているかをよりよく説明するために、 の型を明示しました。

public static A SomeAction<B>(IList<T> data) where T : IExportable
{
    //Notice what typeof returns.
    System.Type tType = typeof(T);
    IList<B> BLists = SomeMethod(tType);
    //...
}  
于 2013-07-22T04:30:46.367 に答える