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

Mos*_*aou 7 .net c# generics types dynamic

我有一个使用通用方法的API如下

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

    public static IDbConnection GetConnection()
    {
        // Get connection
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序包含在运行时使用CodeDOM生成的类,并且为了跟踪我创建了一个名为的接口IDataObject.我试图将每个对象的具体类型传递给上面的泛型方法,如下所示:

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

dataObject包含从中继承的类的实例IDataObject.我有兴趣获得该类型并将其传递给T.我试图找出是否有可能在dynamic这里使用.typeof()并且GetType()不像这里所说的那样起作用

Jon*_*eet 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());
}
Run Code Online (Sandbox Code Playgroud)

dataObject动态地使用,获取"执行时编译器"来执行类型推断T.

可以使用反射来自行完成,使用MethodInfo.MakeGenericMethod- 但这种方式肯定会减少代码.