I have an API using generic method as follow
public static class DataProvider
{
public static Boolean DeleteDataObject(Guid uid, IDbConnection dbConnection)
{
// Do something here
}
public static IDbConnection GetConnection()
{
// Get connection
}
}
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(uid, DataProvider.GetConnection());
}
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 dataObject, Guid uid)
where T : IDataObject
{
return DataProvider.DeleteDataObject(uid, DataProvider.GetConnection());
}
That uses dataObject dynamically, getting the "execution-time compiler" to perform type inference to work out T.
You could just use reflection to do this yourself, using MethodInfo.MakeGenericMethod - but this way is certainly less code.