76235


C# を含む最近の言語処理系では、数値定数に桁区切り文字を入れることができて、長めの数値の視認性を高めることができます。

**例:**

[code]

    pi = 3.1415_9265;
    
[/code]

これと同様の文字列を実行時に数値に変換するメソッドなどは用意されているのでしょうか？  
簡単に `int.parse( "123_456" );` とやってみましたが、実行時エラーになってしまいました。

[code]

    System.FormatException
      Message=Input string was not in a correct format.
    
[/code]

それとも、自分で '_' / アンダースコアを取り除かなければいけない？


CC BY-SA 4.0
2021-05-31T18:23:33.020
76234
2021-06-01T00:09:12.370
2021-06-01T00:09:12.370
3060
42287
question
c#
C# の Digit separator / 桁区切り文字を含む文字列を実行時に数値に変換するには？


「自分で '_' / アンダースコアを取り除かなければいけない」です。

.NETラインタイムとしては、`_`
が何を意味する記号なのか把握できません。同様にアルファベットが含まれた時、それが16進表記なのかゴミなのかも自動的に解釈することは不可能です。開発者が明示的に指定する必要があります。  
どのようなバリエーションがあり得るのか、 [`NumberStyles` 列挙型](https://docs.microsoft.com/ja-
jp/dotnet/api/system.globalization.numberstyles?view=net-5.0)
で指定することになりますが、ここに用意されていない指定はできないということになります。

* * *

> とすると、言語処理系内の表記と、実行時の記法が異なる。ということですね。

はい、異なります。例えばソースコードにおいて小数点は必ず `.` ですが、実行時は地域に応じて、 `.` だったり `,` だったり動的に変化します。  
`"123,456"`とあった場合に、ソースコードにおいてはコンパイル環境でコードの意味が変わるのは困るため一意に定まるようになっていますが、実行時においては地域に応じた解釈がされるべき、一意に定まるべきではない、という相反する要求があります。そのため、両者は全く別の機能であると理解してください。


CC BY-SA 4.0
2021-05-31T20:06:17.570
76235
2021-05-31T22:57:57.477
2021-05-31T22:57:57.477
4236
4236
76234
answer