『Visual C#実践講座』 1章 その9 入力文字列を整数に変換する(通貨記号、区切り文字に対応)

using System;
using System.Globalization;

class Program
{
    static void Main(string[] args)
    {
        int? n = GetInt();
        if (n == null)
        {
            Console.WriteLine("値を取得できませんでした");
        }
        else
        {
            Console.WriteLine(n);
        }
    }

    // カンマ区切り、通貨記号などにも対応
    static int? GetInt()
    {
        Console.Write("整数を入力してください: ");
        string s = Console.ReadLine();

        int n;
        // 4つ引数取るタイプのTryParse。NumberStyles, NumberFormatInfoクラスはSystem.Globalizationにある。
        if (int.TryParse(s, NumberStyles.Any, NumberFormatInfo.CurrentInfo, out n))
        {
            return n;
        }
        else
        {
            return null;
        }
    }
}
整数を入力してください: 12,345
12345
整数を入力してください: 123,45
12345
整数を入力してください: 1,,2,,3
123
整数を入力してください: \123
123
整数を入力してください: %123
値を取得できませんでした
整数を入力してください: $123
値を取得できませんでした
整数を入力してください: \\123
値を取得できませんでした
整数を入力してください: 133
値を取得できませんでした
NumberStyles, Int32.Parse, NumberFormatInfo

NumberStyles 列挙体 (System.Globalization)
http://msdn.microsoft.com/ja-jp/library/system.globalization.numberstyles(VS.80).aspx
Number, None, Integer, HexNumber, Float, Anyなど

通貨記号OK AllowCurrencySymbol
小数点OK AllowDecimalPoint
指数表記OK AllowExponent
16進数表記OK AllowHexSpecifier
プラスマイナスOK AllowLeadingSign
先頭の空白OK AllowLeadingWhite
後続する空白OK AllowTrailingWhite
区切りのコンマOK AllowThousands


Int32.Parse メソッド (String, NumberStyles, IFormatProvider) (System)
http://msdn.microsoft.com/ja-jp/library/9yaffedz.aspx

public static int Parse(
    string s,
    NumberStyles style,
    IFormatProvider provider
)

Int32 メンバ (System)
http://msdn.microsoft.com/ja-jp/library/system.int32_members.aspx
CompareTo, Equals, Parse, TryParse, ToString,
MaxValue, MinValueなど。


NumberFormatInfo クラス (System.Globalization)
http://msdn.microsoft.com/ja-jp/library/system.globalization.numberformatinfo(VS.80).aspx

このクラスは、通貨、桁区切り記号、その他の数値記号などの情報を格納します。

現在のスレッドのカルチャに対して NumberFormatInfo を作成するには、CurrentInfo プロパティを使用

NumberFormatInfo メンバ (System.Globalization)
http://msdn.microsoft.com/ja-jp/library/system.globalization.numberformatinfo_members(VS.80).aspx


参考
方法 : 16 進文字列と数値型の間で変換を行う (C# プログラミング ガイド)
http://msdn.microsoft.com/ja-jp/library/bb311038.aspx