将具体对象类型作为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
包含从IDataObject
inheritance的类的实例。 我有兴趣获得该类型并将其作为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
来做这件事 – 但这种方式肯定是更少的代码。