我有这堂课:
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);
有什么想法?感谢
答案 0 :(得分: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
的{{1}}参数是MethodInfo.Invoke
,其参数的数量,顺序和类型与调用的方法相同。在您的情况下,您有一个object[]
类型的参数。因此,string[]
的{{1}}参数应该是包含一个元素的数组,并且该元素是object[]
的实例。这就是我用上面的语法完成的。