6

我正在使用带有参数的公共静态类和静态方法:

public static class WLR3Logon
{
   static void getLogon(int accountTypeID)
   {}
}

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

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

int[] parameters = { accountTypeId };

foreach (int parameter in parameters)
{
    inf.Invoke("getLogon", parameters);
}

但它给了我错误

“你调用的对象是空的。”

我要去哪里错了。

4

4 回答 4

19

通过使用以下方法解决了这个问题:

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 } );
于 2012-06-22T14:40:42.843 回答
7

这里有很多问题

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

您的方法是私有的,因为您没有明确声明访问修饰符。您有两个选项可以使您的代码按预期工作:

  • 将您的方法更改为public.
  • BindingFlags.NonPublicGetMethod通话中指定
于 2012-06-20T10:19:46.037 回答
1

做你的方法public。它应该在那之后工作

 public static class WLR3Logon
 {
       public static void getLogon(int accountTypeID)
       {}
 }
于 2012-06-20T10:24:19.093 回答