使用Reflection获取带参数的静态方法

new*_*per 4 c# reflection

我正在使用公共静态类和静态方法及其参数:

public static class WLR3Logon
{
   static void getLogon(int accountTypeID)
   {}
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试将其参数的方法提取到另一个类并使用以下代码:

MethodInfo inf = typeof(WLR3Logon).GetMethod("getLogon",
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);

int[] parameters = { accountTypeId };

foreach (int parameter in parameters)
{
    inf.Invoke("getLogon", parameters);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我错误

"你调用的对象是空的."

我哪里出错了.

new*_*per 14

使用以下方法解决了此问题:

using System.Reflection;    
string methodName = "getLogon";
Type type = typeof(WLR3Logon);
MethodInfo info = type.GetMethod(
    methodName, 
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

object value = info.Invoke(null, new object[] { accountTypeId } );
Run Code Online (Sandbox Code Playgroud)


Pol*_*ity 5

这里有很多问题

  • 您的静态方法是私有的,但您选择仅在公开可见访问时过滤的方法.要么使您的方法公开,要么确保绑定标志包含私有方法.现在,没有找到方法返回inf为null,这会导致你的null-ref异常.
  • 参数是一个int数组,其中MethodInfo需要一个对象数组.您需要确保传入一个对象数组.
  • 循环遍历参数仅用于使用整个参数集多次调用该方法.删除循环.
  • 您使用方法的名称调用MethodInfo.Invoke作为第一个参数是无用的,因为当该方法是实例方法时,此参数是实例.在您的情况下,此参数将被忽略