これを行うための私のコードは、ユーザー入力の代わりに、私が与えたリフレクションと文字列を使用します。最終的には、ユーザーが「float」「2.0」と言って、コンピューターに「float」または「bool」「abc」と言わせることができるようにしたいと思います。これは、聞いたブール値ではありません。
ユーザー入力を受け取り、それを「string」から「System.String」、「float」から「System.Single」などのプリミティブ型の名前に変換するのは簡単です(ただし、関数を知っている場合)そうするためには、それも素晴らしいことです。)
コードは次のとおりです。
Console.WriteLine("1.0 => {0}", System.Single.Parse("1.0")); // this works fine.
Type t = Type.GetType("System.Single"); // for parsing floats
MethodInfo mi = t.GetMethod("System.Single.Parse"); // "ambiguous" if use "Parse"
object[] parameters = new object[] { "1.0" };
float f = (float)(mi.Invoke(null, parameters)); // get null exception here.
Console.WriteLine("Was succesfully parsed to: " + f);
しかし、最後から2番目の行でnull例外が発生し続けます。そこで何が起こっているのですか?