これを行うためのコードでは、ユーザ入力ではなくリフレクションと文字列を使用しています。最終的に私は、ユーザーが "float" "2.0"と言うことができるようにしたいと思っていますし、コンピュータが言う、浮動小数点、または "bool" "abc"コンピュータが言うだろう、それは聞いたことがないブール値です。cでユーザ入力に基づいてプリミティブ型に解析する#
ユーザー入力を受け取り、 "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番目のヌル例外を取得しておきます。そこには何が起こっているのですか?
なぜTryParseを使用しないのですか?私はそれがかなり単純化すると思う。 –
リフレクションを使わずに** Single.Parse( "1.0")**を直接使用することはできません。 – Jeff
@Chris:パースを試してみると、実際には面白いフラッグのb/cが複雑になります。 – user420667