3
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です。null参照例外を作成します。テキストを介して渡されたメソッドを呼び出す必要があります(テキストファイルから取得されます)

解決済み:メソッドはプライベートです。

4

3 に答える 3

13

ManhattanHはプライベートメソッドです。このメソッドをパブリックにするか、BindingFlags.NonPublicを使用します。

于 2012-04-01T03:03:00.930 に答える
1

GetMethodそのタイプのパブリックメンバーのみを自動的に検索します。次の行に置き換えることで、これを回避できます(検索にプライベートメンバーを含めることができます)。

MethodInfo HMethodInfo = this.GetType().GetMethod(Method, BindingFlags.Instance | BindingFlags.NonPublic);
于 2012-04-01T03:07:11.723 に答える
0

Type.GetMethodメソッド(文字列、Type [])

名前の検索では大文字と小文字が区別されます。検索には、パブリック静的メソッドとパブリックインスタンスメソッドが含まれます。

コンストラクターとメソッドを検索するときにパラメーターを省略することはできません。呼び出すときは、パラメーターのみを省略できます。

メソッドをpublicに変更して、これを試してください。

MethodInfo HMethodInfo = this.GetType().GetMethod(Method,
    new Type[]{typeof(int), typeof(int), typeof(int), typeof(int)});
于 2012-04-01T03:03:32.890 に答える