質問: 3.1415_9265; ``` これと同様の文字列を実行時に数値に変換するメソッドなどは用意されているのでしょうか? 簡単に `int.parse( "123_456" );` とやってみましたが、実行時エラーになってしまいました。 ``` System.FormatException Message=Input string was not in a correct format. ``` それとも、自分で '_' / アンダースコアを取り除かなければいけない?
回答: 「自分で '_' / アンダースコアを取り除かなければいけない」です。 .NETラインタイムとしては、`_` が何を意味する記号なのか把握できません。同様にアルファベットが含まれた時、それが16進表記なのかゴミなのかも自動的に解釈することは不可能です。開発者が明示的に指定する必要があります。 どのようなバリエーションがあり得るのか、 `NumberStyles` 列挙型 で指定することになりますが、ここに用意されていない指定はできないということになります。 > > とすると、言語処理系内の表記と、実行時の記法が異なる。ということですね。 > > > はい、異なります。例えばソースコードにおいて小数点は必ず `.` ですが、実行時は地域に応じて、 `.` だったり `,` だったり動的に変化します。 `"123,456"`とあった場合に、ソースコードにおいてはコンパイル環境でコードの意味が変わるのは困るため一意に定まるようになっていますが、実行時においては地域に応じた解釈がされるべき、一意に定まるべきではない、という相反する要求があります。そのため、両者は全く別の機能であると理解してください。