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

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

public static class DataProvider { public static Boolean DeleteDataObject(Guid uid, IDbConnection dbConnection) { // Do something here } public static IDbConnection GetConnection() { // Get connection } } 

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

 public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid) { return DataProvider.DeleteDataObject(uid, DataProvider.GetConnection()); } 

dataObject包含从IDataObjectinheritance的类的实例。 我有兴趣获得该类型并将其作为T传递。 我试图找出是否有可能在某种程度上使用dynamic这里。 typeof()GetType()不能像Here中所述那样工作

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

 public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid) { return PurgeDataObjectImpl((dynamic) dataObject, uid); } private static Boolean PurgeDataObjectImpl(T dataObject, Guid uid) where T : IDataObject { return DataProvider.DeleteDataObject(uid, DataProvider.GetConnection()); } 

它动态地使用dataObject ,让“执行时编译器”执行类型推断来计算出T

可以使用reflection来自己使用MethodInfo.MakeGenericMethod来做这件事 – 但这种方式肯定是更少的代码。