Метод Info возвращает ноль, не знаю, почему - PullRequest
2 голосов
/ 01 апреля 2012
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 имеет значение null.Создает исключение нулевой ссылки.Он должен вызывать метод, переданный через текст (который извлекается из текстового файла)

Решено: методы являются частными.

Ответы [ 3 ]

12 голосов
/ 01 апреля 2012

Манхэттен - это частный метод.Сделайте этот метод общедоступным или используйте BindingFlags.NonPublic.

1 голос
/ 01 апреля 2012

GetMethod автоматически ищет только открытых членов этого типа.Вы можете обойти это (и сделать так, чтобы поиск включал частных участников), подставив в этой строке:

MethodInfo HMethodInfo = this.GetType().GetMethod(Method, BindingFlags.Instance | BindingFlags.NonPublic);
0 голосов
/ 01 апреля 2012

Метод Type.GetMethod (String, Type [])

При поиске имени учитывается регистр.Поиск включает в себя общедоступные статические и общедоступные методы экземпляров.

Нельзя пропускать параметры при поиске конструкторов и методов.Вы можете опустить параметры только при вызове.

Измените ваш метод на public и попробуйте это:

MethodInfo HMethodInfo = this.GetType().GetMethod(Method,
    new Type[]{typeof(int), typeof(int), typeof(int), typeof(int)});
...