2015/04/28

C# int.Parse 系関数の挙動

他所様で int.Parse / TryParse が漢数字をパースするっていう話を見て、
(ホントかよ・・?)
ってことでやってみた。

Windows7(日本語)SP1 .Net4.5.1(4.5.51209) VS2013Pro 12.0.31101.00 Upd4

こんなかんじのコード。

public static void hoge(string s)
{
  int a;
  bool r = int.TryParse(s, out a);
  Console.WriteLine(r.ToString());
}

"1"Trueアスキーの 1 なら当然変換できる
"1"False全角 1 は変換できない
"一"False漢数字 一 は変換できない


ついでなので、

char.IsDigit("1", 0)Trueアスキーの 1
char.IsDigit("1", 0)True全角 1
char.IsDigit("一", 0)False漢数字 一

もうひとつ。

char.IsNumber("1", 0)Trueアスキーの 1
char.IsNumber("1", 0)True全角 1
char.IsNumber("一", 0)False漢数字 一

結論

カルチャに依存するかもしれないが、全角アラビア数字や漢数字は変換できなかった。


漢数字変換は特に、表記法や位取り法が決定的でないから、考えただけでも嫌気がするぐらい面倒なので、これがシステムでサポートされているとは考えにくい。