我想从字符串中调用方法,但它不允许我将null
作为参数传递。该方法不需要参数。
private void reconnect_Click(object sender, EventArgs e)
{
string methodName = "data_load1";
//Get the method information using the method info class
MethodInfo mi = this.GetType().GetMethod(methodName);
//Invoke the method
mi.Invoke(this, null);
}
data_load方法:
private void data_load1()
{
this.dataTableAdapter.Fill(this.myDataSet.data);
}
我收到NullReferenceException was unhandled
的{{1}}。为什么这不让我传递mi.Invoke(this, null);
参数?
答案 0 :(得分:5)
mi
为空。
要获取私有方法,您需要传递BindingFlags.Instance | BindingFlags.NonPublic
。
答案 1 :(得分:0)
问题不在于参数 - MethodInfo.Invoke()
允许参数为空值。
类型:System.Object []
调用的方法或构造函数的参数列表。这是一个对象数组,其数量,顺序和类型与要调用的方法或构造函数的参数相同。如果没有参数,则参数应为null。 如果此实例表示的方法或构造函数采用ref参数(Visual Basic中的ByRef),则该参数不需要特殊属性,以便使用此函数调用方法或构造函数。此数组中未使用值显式初始化的任何对象都将包含该对象类型的默认值。对于reference-type元素,此值为null。对于value-type元素,此值为0,0.0或false,具体取决于特定的元素类型。
以上来自MSDN。
我希望找不到该方法的任何原因(拼写错误?),MethodInfo
对象为空。
另一方面,您是否有理由使用反射从对象实例中调用私有方法 - 为什么不直接调用该方法?