繁体   English   中英

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

[英]Pass concrete object type as parameter for generic method

我有一个使用通用方法的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()不能像Here中所述那样工作

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

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来做到这一点 - 但这种方式肯定是更少的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM