将具体对象类型作为泛型方法的参数传递

时间:2013-05-10 22:22:48

标签: c# .net generics dynamic types

我有一个使用通用方法的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传递。我试图找出是否有可能在这里使用dynamictypeof()GetType()无效,如Here

中所述

1 个答案:

答案 0 :(得分:17)

我怀疑你想要这样的东西:

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