【问题标题】:Reflection Invoke With Parameters c# Error带参数的反射调用 c# 错误
【发布时间】:2014-11-03 16:51:54
【问题描述】:

我收到这个错误

'System.Reflection.TargetException', 对象与目标不匹配 输入。

这是我的课

public clas Service 
{
  public DataTable ArticlesGet(string SearchValue = null, string SearchColumn = null, string SearchOperator = "%")
  {

    //Methods Here
  }
}

这是我的反射代码

object obj = new Service();
Type Type = obj.GetType();
MethodInfo MethodInfo = Type.GetMethod("ArticlesGet");
MethodInfo.Invoke(Type, new object[] { "", "", "%" });  // Error

提前谢谢你。

【问题讨论】:

  • 你不应该将你的变量命名为Type
  • 你能举个例子或比这更好的吗?
  • 即使serviceType 更好,完全可以避免冲突。顺便提一句。您可以尝试将typeof(Service) 作为第一个参数。
  • 您将变量命名为与类相同的类型,与执行字符串字符串相同;
  • 你必须提供一个Service实例,你使用的调用语法是针对静态方法的。

标签: c# winforms reflection


【解决方案1】:

试试这个简单的方法,代码简洁明了:

   Type ty = typeof(Service);
   Service myTypeObject = (Service)Activator.CreateInstance(ty);

    DataTable myDataTable = myTypeObject.ArticlesGet("SearchValue", "SearchColumn", "SearchOperator");

【讨论】:

    【解决方案2】:

    您需要提供要调用该方法的实例,而不是其类型:

    DataTable table = (DataTable) MethodInfo.Invoke(obj, new object[] { "", "", "%" }); 
    

    【讨论】:

    • 非常感谢!!工作完美!你为我节省了很多时间!谢谢!
    【解决方案3】:

    Method.Invoke 的第一个参数是对象的实例,在您的情况下应该是 obj,而不是 Type

    【讨论】:

      【解决方案4】:

      只需要修复调用方法的第 4 行,您需要传递对象实例而不是传递类 Type 对象。

      object obj = new Service();
      Type Type = obj.GetType();
      MethodInfo MethodInfo = Type.GetMethod("ArticlesGet");
      var dataTableObject = MethodInfo.Invoke(obj, new object[] { "", "", "%" });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-19
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 2013-04-03
        相关资源
        最近更新 更多