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 回答