我正在使用反射来调用通用方法,此方法返回一个对象,我想将其转换为调用之后的方法。
public static string GetTableName(this ObjectContext context, Type T)
{
var method = typeof(ObjectContext).GetMethod("CreateObjectSet", new Type[]{});
var generic = method.MakeGenericMethod(T);
var objectSet = generic.Invoke(context, null);
var sqlString = objectSet.ToTraceString();
// doesn't work because ToTraceString() isn't a method of object
// it's a method of ObjectSet<T>
...
}
T 直到运行时才知道。如何将 objectSet 转换为 ObjectSet
最佳答案
作为TyCobb说,你有更多的反射(reflection)。继续前进,直到找到可以为其编写强制转换的类型,例如 string
:
public static string GetTableName(this ObjectContext context, Type T)
{
var method = typeof(ObjectContext).GetMethod("CreateObjectSet", new Type[] { });
var generic = method.MakeGenericMethod(T);
var objectSet = generic.Invoke(context, null);
var toTrace = typeof(ObjectSet<>).MakeGenericType(T).GetMethod("ToTraceString");
var sqlString = (string)toTrace.Invoke(objectSet, null);
//...
}
关于c# - 在运行时将对象转换为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769746/