C# MethodeInfo Invoke

本文关键字:Invoke MethodeInfo | 更新日期: 2023-09-27 18:19:21

嘿,我得到错误与这段代码:

public  void readCommand(string data)
    {
        string[] commandInfo = data.Split(':');
        string command = commandInfo[0];
        object[] @params = new object[commandInfo.Length-1];
        for(int i = 1;i<commandInfo.Length;i++)
        {
            @params[i - 1] = commandInfo[i];
        }
            if (commands.Contains(command))
            {
                try
                {
                    MethodInfo Minfo = this.GetType().GetMethod(command);
                    Minfo.Invoke(this, @params);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
    }

我正在尝试调用一个名为ShowMes:

的方法
   private  void ShowMes(string par)
    {
        MessageBox.Show((string)par);
    }

这段代码有什么问题?因为调用会抛出异常

"对象引用未设置为对象实例"

C# MethodeInfo Invoke

您试图使用的GetMethod

查找具有指定名称的公共方法。

你的方法是私有的,所以你必须使用接受BindingFlags参数的重载

MethodInfo Minfo = this.GetType()
    .GetMethod(command, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

在获取非公共方法时必须包含BindingFalgs。我猜Minfo是空的,当你调用调用它。

像这样修改你的代码:

MethodInfo Minfo = this.GetType().GetMethod(command,BindingFlags.Instance | BindingFlags.NonPublic);

正如我在你的应用程序中看到的函数名是作为命令来的,也许使用BindingFlags.IgnoreCase标志也会很有用。