试图使用GetMethod来初始化MethodInfo变量

本文关键字:初始化 MethodInfo 变量 GetMethod | 更新日期: 2023-09-27 18:16:29

我试图通过传递包含函数名称的字符串来调用函数。

下面是我的代码,两者都不能工作。问题是我的MethodInfo变量mi总是null。

在调试中,我使用GetMethods方法来查看列出的所有函数。我试图调用的函数被列出,我已经仔细检查了拼写。我做错了什么?

object[] paraArray = new object[] { corpAct, secEvents };
MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName);
mi.Invoke(this, paraArray);

第二次尝试

Type[] paraTypes = new Type[] { typeof(IHoldingLog), typeof(SecurityEvent) };
object[] paraArray = new object[] { corpAct, secEvents };
MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName, paraTypes);
mi.Invoke(this, paraArray);

试图调用的函数,

void myFunction(IHoldingLog log, SecurityEvent sec)

我只是尝试使用下面的行,但仍然得到mi为null

MethodInfo mi = this.GetType().GetMethod(corpAct.DelegateName, BindingFlags.NonPublic);

试图使用GetMethod来初始化MethodInfo变量

默认情况下,GetMethod只返回public实例方法或静态方法。因此,如果您不指定BindingFlags,默认情况下它将返回到BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public

使用下面的调用变体来包含非公共方法。

this.GetType().GetMethod("myMethod", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)

如果你的方法有重载,那么你可以使用GetMethod重载,它允许你指定参数类型来确定你想要的重载(如你的第二个例子)。如果您的方法没有重载,则无需指定参数类型。