11

次のようにジェネリックメソッドを使用するAPIがあります

public static class DataProvider
{
    public static Boolean DeleteDataObject<T>(Guid uid, IDbConnection dbConnection)
    {
        // Do something here
    }

    public static IDbConnection GetConnection()
    {
        // Get connection
    }
}

私のアプリケーションには、実行時に CodeDOM を使用して生成されたクラスが含まれており、追跡するために、 というインターフェイスを作成しましたIDataObject。次のように、各オブジェクトの具象型を上記のジェネリック メソッドに渡そうとしています。

public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
    return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}

dataObjectから継承するクラスのインスタンスが含まれていますIDataObject。その型を取得して として渡すことに興味がありTます。どういうわけかここで使用できるかどうかを調べようとしていdynamicます。ここtypeof()に記載されているように機能しGetType()ません

4

1 に答える 1

19

次のようなものが必要だと思います:

public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
    return PurgeDataObjectImpl((dynamic) dataObject, uid);
}

private static Boolean PurgeDataObjectImpl<T>(T dataObject, Guid uid)
    where T : IDataObject
{
    return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}

それはdataObject動的に使用し、「実行時コンパイラ」を取得して型推論を実行しTます。

-を使用して、リフレクションを使用して自分でこれを行うこともできMethodInfo.MakeGenericMethodますが、この方法は確かにコードが少なくなります。

于 2013-05-10T22:36:23.440 に答える