[英]return generic IEnumerable when passing concrete type parameter for a generic method
[英]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.