如何调用返回泛型类型的泛型方法?

时间:2017-03-23 11:02:10

标签: c# asp.net-mvc generics reflection

真的遇到了这个问题,

在单独的页面上有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但未在用户代码中处理

     

其他信息:对象与目标类型不匹配。

我想念的东西,什么对象不匹配,不明白。谢谢你们。

1 个答案:

答案 0 :(得分:4)

您应该在包含它的类型上调用方法,这样:

object classInstance = Activator.CreateInstance(_type, null);

应改为:

object classInstance = Activator.CreateInstance(baseService, null);