更正语法以按名称调用方法

本文关键字:调用 方法 语法 | 更新日期: 2023-09-27 18:35:21

下面的代码正确地找到了类和方法,但它给出了以下错误method.Invoke(this, null);

System.Reflection.TargetException was unhandled
  HResult=-2146232829
  Message=Object does not match target type.
  Source=mscorlib
  StackTrace:.....

调用 void 方法的正确语法是什么?

using System;
using System.Reflection;
using System.Windows;
namespace ProjectXYZ
{
    class NavigateOptions
    {

        public bool runMethod(string debug_selectedClass)
        {
            Type t = Type.GetType("ProjectXYZ." + debug_selectedClass);
            MethodInfo method = t.GetMethod("test");
            if (method.IsStatic)
                method.Invoke(null, null);
            else
                method.Invoke(this, null);
            return true;
        }
    }
    public class Option72
    {
        public void test()
        {
            string hasItRun = "Yes";
        }
    }
}

更正语法以按名称调用方法

this(从中调用方法的类)不是定义test()方法的类。您必须提供该类的实例(由 debug_selectedClass 指示的实例)才能在其上调用非静态方法。

如果它有一个空的构造函数,你可以这样做:

if (method.IsStatic)
    method.Invoke(null, null);
else
{
    object instance = Activator.CreateInstance(t);
    method.Invoke(instance, null);
}