HOWTO · Csharp

C# でコンソールから整数を読み取る

C# でコンソールから整数値を読み取るために使用できる 3つの主要なメソッド、int.Parse()、int.TryParse()、および Convert.ToInt32()メソッドがあります。

このページの内容

C# のコンソールから整数を読み取るには、まず Console.ReadLine() で1行を読み取り、その文字列を変換します。入力が想定外の文字列になる可能性がある場合は int.TryParse() を使いましょう。変換できたかどうかを返すため、通常の制御フローで不正な入力に対処できます。このガイドでは、行単位の入力に使う int.Parse()、int.TryParse()、Convert.ToInt32() を比較します。

int.Parse() でコンソールから整数を読み取る

int.Parse() は、有効な 32 ビット整数を含む文字列を int に変換します。入力が信頼できる場合や、周囲のコードで変換エラーを処理する場合に、簡潔に書けます。

次の完全なプログラムは、1行を読み取って変換した値を表示します。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value = int.Parse(input);
        Console.WriteLine($"You entered: {value}");
    }
}
Enter an integer: You entered: 42

整数ではない文字列を渡すと FormatException が発生し、Int32 の範囲外の値を渡すと OverflowException が発生します。実際のコンソールでは、入力ストリームが1行を読み取る前に終了すると、Console.ReadLine() は null を返します。その値を int.Parse() に渡すと ArgumentNullException が発生するため、入力の終端に達する可能性がある場合は、先に null を確認してください。この例では StringReader から 42 を渡し、単独で使える形にしています。

int.TryParse() でコンソールから整数を読み取る

対話形式の入力では、変換の成否を通常の制御フローで扱えるため、int.TryParse() が最も分かりやすい選択肢になることが多いです。文字列が範囲内の整数を表す場合は true を返し、変換後の数値を out 変数に設定します。それ以外の場合は false を返し、その変数には既定値の 0 を設定します。数値を使う前に、戻り値の Boolean を確認してください。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value;

        if (int.TryParse(input, out value))
        {
            Console.WriteLine($"You entered: {value}");
        }
        else
        {
            Console.WriteLine("Enter a whole number within the Int32 range.");
        }
    }
}
Enter an integer: You entered: 42

数値以外の文字列、入力の終端、または int の範囲外の値に対して、TryParse は false を返すため、プログラムは else ブランチのメッセージを表示します。プロンプトと解析の確認をループに入れれば、入力し直せるようにできます。この例では1回だけ応答して終了します。ここでは例を単独で使えるように、StringReader から 42 を渡します。

Convert.ToInt32() でコンソールから整数を読み取る

Convert.ToInt32() も、Console.ReadLine() が返す行を変換する方法です。数値を表す文字列なら、int.Parse() と同じ int 値になります。ただし、任意の文字列を安全に変換できるわけではありません。数値以外の文字列では FormatException が発生することがあり、Int32 の範囲外の値では OverflowException が発生することがあります。null 文字列は例外で、Convert.ToInt32((string)null) は 0 を返しますが、int.Parse(null) は ArgumentNullException をスローします。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        Console.SetIn(new StringReader("42"));
        Console.Write("Enter an integer: ");
        string input = Console.ReadLine();
        int value = Convert.ToInt32(input);
        Console.WriteLine($"You entered: {value}");
    }
}
Enter an integer: You entered: 42

入力を人が行い、通常の検証処理で対処したい場合は int.TryParse() を選びましょう。変換エラーを呼び出し元で処理する場合は、int.Parse() または Convert.ToInt32() を使えます。ここで紹介したコンソール入力の例では、3つの方法すべてで最初に Console.ReadLine() を使います。違いは、変換結果や特殊な入力値をどう扱うかです。