【发布时间】:2020-11-04 21:18:26
【问题描述】:
我正在制作一个应用程序,该应用程序通过键入然后调用相应方法的命令在命令行进行交互。问题是,其中一些方法是异步的,因此,根据我所听到的,应该返回 Task 而不是 void,即使它们的返回值没有被使用(但是我正在制作的程序不需要异步我在某些方法中使用的库是异步的)。
因此,我不能使用代表字典(据我所知),因为它们是不同的类型,所以我尝试使用反射。
MethodInfo command = MethodBase.GetCurrentMethod()
.DeclaringType
.GetMethod(_commands[args[0]]);
command.Invoke(null, new string[][] { args });
上面的sn-p是想通过名字获取一个静态方法,然后用参数string[] args调用它。
根据我正在查看的文档以及其他 StackOverflow 答案,如果被调用的方法是静态的,则第一个参数应该为 null,但是无论如何我都会收到 NullReferenceException。为什么会这样,我该如何解决?
【问题讨论】:
-
您检查过
command不为空吗? -
_commands是否为空? -
GetMethod()如果找不到您的方法,则返回 null。你确定你拼写正确吗? -
为什么是锯齿状 (
string[][]) 数组?command?.Invoke(null, args.Select(s => (object)s).ToArray() );
标签: c# methods reflection