各数値型の TryParse メソッドの動作差異
Int32.TryParse や Int64.TryParse にカンマ編集処理された数値文字列を渡すと false が返ってきます。
Int32.TryParse("1,234", out value); // false Int64.TryParse("1,234", out value); // false
一方、 Double.TryParse や Decimal.TryParse にカンマ編集処理された数値文字列を渡すと true が返ってきて変換が成功します。
Double.TryParse("1,234.123", out value); // true Decimal.TryParse("1,234.123", out value); // true
これ、デフォルトで設定されている NumberStyles が違う( Int32 と Int64 は AllowThousands が指定されていない)のが原因なんですが、なぜ Double と Decimal だけ AllowThousands が指定されているんだろう。。。
ちなみに、 Int32 / Int64 でカンマ編集処理された数値文字列をパースするには、明示的に NumberStyles を指定してあげれば出来ます。
Int32.TryParse("1,234", NumberStyles.Integer | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out value); Int64.TryParse("1,234", NumberStyles.Integer | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out value);