2005年02月24日

Invokeメソッド

  
リフレクションのInvokeメソッドを使うとき、パラメータの与え方でバカをやってしまいました。
MyClassにあるstaticメソッドのMaxが以下のように定義されていた時に、
   public static double Max(double[] nums);
本来は、
  Type type = Type.GetType("MyClass");
MethodInfo minfo = type.GetMethod("Max");
double[] obj = new double[] { 1, 2, 3, 4, 5, 8, 2 };
object[] prm = new object[1] { obj };
double ans = (double)(minfo.Invoke(null,prm));
と書くべきところを
  Type type = Type.GetType("MyClass");
MethodInfo minfo = type.GetMethod("Max");
double[] obj = new double[] { 1, 2, 3, 4, 5, 8, 2 };
double ans = (double)(minfo.Invoke(null,prm));
と書き、なぜ、例外が発生するのか悩んでしまいました。
これだと、7つの引数がある、Max を呼び出していることになりますが、それに気が付きませんでした。

トイレに行くのに席を立ち、廊下を歩いているときに、「あっ、そうか」と、間違った理由がわかりました。
結構、一息入れた時に間違いの原因に気が付くことってありますよね。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/15012235