将字符串数组参数传递给Invoke方法

时间:2011-11-13 16:27:34

标签: c# reflection

我有这堂课:

using System.Linq;
  namespace TestNamespace {
     public class Program {
         public static void Main(string[] args) {
                //does stuff
          }
      }
    }

我正在加载上面的程序集,并希望使用字符串数组参数调用该方法。

这给了我一个空例外:

private static object[] parameters = new object[1];
string[] pa = { "1", "2" };
parameters[0] = pa;
//Creating target and other code
bool retVal = (bool)target.Invoke(null, parameters);

有什么想法?感谢

1 个答案:

答案 0 :(得分:4)

NullReferenceException在哪里。您确定正确反映了MethodInfotarget不是null吗?这是我怀疑这里到底发生了什么。如果方法中存在NullReferenceException,则会将其包含在TargetInvocationException中,因此我怀疑NullReferenceException是因为target为空。

要清楚,以下是加载和调用方法的方法:

var target = typeof(Program)
                 .GetMethod("Main", BindingFlags.Public | BindingFlags.Static);
bool retVal = (bool)target.Invoke(null, new object[] { pa });

parameters的{​​{1}}参数是MethodInfo.Invoke,其参数的数量,顺序和类型与调用的方法相同。在您的情况下,您有一个object[]类型的参数。因此,string[]的{​​{1}}参数应该是包含一个元素的数组,并且该元素是object[]的实例。这就是我用上面的语法完成的。