真的遇到了这个问题,
在单独的页面上有grids
并且所有页面都保持List of objects
,所有行都在行的末尾有编辑按钮,并尝试使动态方法在按下时返回单个对象编辑按钮。
所以我添加generic method
这样的(可能是错的,请纠正我),只是试图在这个方法中找到断点,这就是为什么现在不包含任何东西
public T GetItem<T> (int ID) {
Type _type = typeof(T);
object result = null;
//some code
return (T)result;
}
ActionResult调用GetItem方法,ID和TypeName来自Ajax帖子,我们可以假设ID = 7, TypeName = "ProjectViewModel"
public virtual ActionResult GetEditItem(int ID, string TypeName){
Type _type = Type.GetType("Project.Models." + TypeName); // returns ProjectViewModel
Type baseService= Type.GetType("Project.Services.BaseService"); // service that keeps the method
MethodInfo _method = baseService.GetMethod("GetItem");
object[] item = new object[] { ID }; // parameter to pass the method
object classInstance = Activator.CreateInstance(_type, null); // create instance with that type (ProjectViewModel right now)
_method.MakeGenericMethod(_type).Invoke(classInstance, item); // invoke it but it returns error in this line
return View();
}
例外是;
发生了'System.Reflection.TargetException'类型的异常 mscorlib.dll但未在用户代码中处理
其他信息:对象与目标类型不匹配。
我想念的东西,什么对象不匹配,不明白。谢谢你们。
答案 0 :(得分:4)
您应该在包含它的类型上调用方法,这样:
object classInstance = Activator.CreateInstance(_type, null);
应改为:
object classInstance = Activator.CreateInstance(baseService, null);