我正在使用反射来调用泛型方法,该方法返回一个对象,我希望将其转换为之后调用的方法。
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 <T>以能够调用ToTraceString()?
正如TyCobb所说,您已经使用了更多的反射。继续前进,直到找到可以编写演员表的类型,例如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);
//...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句