2011-11-13 54 views
0

我有此类:传递字符串数组参数来调用方法

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); 

有什么想法?谢谢

回答

4

哪里的NullReferenceException。你确定你正确反映了MethodInfo,并且target不是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参数MethodInfo.Invoke是一个object[]用相同的数量,顺序和类型的方法的参数被调用。在你的情况下,你有一个类型为string[]的单一参数。因此,object[]参数MethodInfo.Invoke应该是一个包含一个元素的数组,该元素是string[]的一个实例。这是我用上面的语法完成的。

+0

你是不是指'bool retVal =(bool)target.Invoke(null,new object [] {pa});'?你的语法给出了一个'{''System.Object []'类型的对象不能转换为类型'System.String []'。“} – Nick

+0

@Nick:对,对不起。 – jason