sealed public class HMethod
{
public int Calc(string Method, int X1, int X2, int Y1, int Y2)
{
MethodInfo HMethodInfo = this.GetType().GetMethod(Method);
return (int)HMethodInfo.Invoke(
this,
new object[4] { X1, X2, Y1, Y2 }
);
}
int ManhattanH(int X1, int X2, int Y1, int Y2)
{
//Blah
}
int LineH(int X1, int X2, int Y1, int Y2)
{
//Blah
}
//Other Heuristics
}
调用new HMethod().Calc("ManhattanH". X1, X2, Y1, Y2)
时,HMethodInfo 为空。创建空引用异常。它应该调用通过文本传入的方法(从文本文件中抓取(
已解决:方法是私有的。
ManhattanH 是私有方法。使此方法是公共的或使用 BindingFlags.NonPublic。
GetMethod
自动搜索该类型的公共成员。您可以通过替换以下行来解决此问题(并让搜索包括私有成员(:
MethodInfo HMethodInfo = this.GetType().GetMethod(Method, BindingFlags.Instance | BindingFlags.NonPublic);
Type.GetMethod Method (String, Type[](
搜索名称区分大小写。搜索包括公共静态和公共实例方法。
查找构造函数和方法时不能省略参数。调用时只能省略参数。
将您的方法更改为公开并尝试此操作:
MethodInfo HMethodInfo = this.GetType().GetMethod(Method,
new Type[]{typeof(int), typeof(int), typeof(int), typeof(int)});