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);
}
这段代码有什么问题?因为调用会抛出异常
"对象引用未设置为对象实例"
您试图使用的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
标志也会很有用。