1

下面的代码正确地找到了类和方法,但它给出了以下错误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";
        }
    }
}
4

1 回答 1

2

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

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

if (method.IsStatic)
    method.Invoke(null, null);
else
{
    object instance = Activator.CreateInstance(t);
    method.Invoke(instance, null);
}
于 2013-10-13T17:20:40.630 回答