将具体对象类型作为通用方法的参数传递 [英] Pass concrete object type as parameter for generic method
问题描述
我有一个API,使用泛型方法如下
I have an API using generic method as follow
public static class DataProvider
{
public static Boolean DeleteDataObject<T>(Guid uid, IDbConnection dbConnection)
{
// Do something here
}
public static IDbConnection GetConnection()
{
// Get connection
}
}
我的应用程序包含在运行时使用CodeDOM生成的类,为了跟踪我创建了一个名为 IDataObject
的接口。我试图将每个对象的具体类型传递给上面的泛型方法,如下所示:
My application contains classes generated using CodeDOM at runtime, and in order to keep track of I created an interface called IDataObject
. I am trying to pass the concrete type of each object to the generic method above as follow:
public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}
dataObject
包含继承自 IDataObject
的类的实例。我有兴趣获得该类型并将其作为 T
传递。我试图找出是否有可能在这里使用动态
。 typeof()
和 GetType()
无法正常工作,如 Here
dataObject
contains an instance of a class that inherit from IDataObject
. I am interested in getting that type and pass it as T
. I am trying to find out if it is possible to somehow use dynamic
here. typeof()
and GetType()
does not work as stated in 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
。
That uses dataObject
dynamically, getting the "execution-time compiler" to perform type inference to work out T
.
你 只需使用反射即可自行执行此操作,使用 MethodInfo.MakeGenericMethod
- 但这种方式肯定会减少代码。
You could just use reflection to do this yourself, using MethodInfo.MakeGenericMethod
- but this way is certainly less code.
这篇关于将具体对象类型作为通用方法的参数传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!