将具体对象类型作为泛型方法的参数传递 [英] 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
传递.我试图找出是否可以在这里以某种方式使用 dynamic
.typeof()
和 GetType()
不像 这里
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
推荐答案
我怀疑你想要这样的东西:
I suspect you want something like this:
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屋!