HOWTO · Csharp

在 C# 中從控制檯讀取整數

有 3 種主要方法可用於從 C# 中的控制檯讀取整數值:int.Parse(),int.TryParse()和 Convert.ToInt32()方法。

本頁內容

在 C# 主控台讀取整數時,先使用 Console.ReadLine() 讀取一整行,再將讀到的文字轉換為整數。若使用者可能輸入非預期文字,建議使用 int.TryParse();它會回報轉換是否成功,讓一般的輸入錯誤能透過正常的程式流程處理。本指南比較 int.Parse()、int.TryParse() 和 Convert.ToInt32() 在逐行讀取輸入時的用法。

使用 int.Parse() 從 C# 主控台讀取整數

int.Parse() 會將包含有效 32 位元整數的字串轉換為 int。如果輸入可信,或周邊程式碼會處理轉換錯誤,這種寫法相當簡潔。

以下完整程式會讀取一行輸入,並印出轉換後的值:

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。在實際的主控台工作階段中,如果輸入串流在讀到一整行之前就結束,Console.ReadLine() 會傳回 null。將這個值傳給 int.Parse() 會引發 ArgumentNullException,因此如果可能遇到輸入結束的情況,請先檢查是否為 null。此範例使用 StringReader 提供 42,讓範例程式自成一體。

使用 int.TryParse() 從 C# 主控台讀取整數

對互動式輸入而言,int.TryParse() 通常是最清楚的選擇,因為轉換是否成功可以直接納入一般的程式流程。當文字代表範圍內的整數時,它會傳回 true,並將轉換後的數字指定給 out 變數。否則,它會傳回 false,並將該變數設為預設值 (0);使用數字前,請先檢查布林結果。

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 區塊中的訊息。你可以將提示訊息和解析檢查放進迴圈,讓使用者有機會重試;此範例只回應一次便結束。這裡由 StringReader 提供 42,讓範例保持自成一體。

使用 Convert.ToInt32() 從 C# 主控台讀取整數

Convert.ToInt32() 也能將 Console.ReadLine() 傳回的那一行文字轉換為整數。對數字文字而言,它產生的 int 值與 int.Parse() 相同。它無法讓任意文字變得安全:非數字文字可能引發 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()。在這些主控台範例中,三種方法都從 Console.ReadLine() 開始;它們的差異在於如何處理轉換結果和特殊輸入值。