HOWTO · Csharp

在 C# 中从控制台读取整数

有 3 种主要方法可用于从 C# 中的控制台读取整数值:int.Parse(),int.TryParse()和 Convert.ToInt32()方法。

本页内容

要从 C# 控制台读取整数,先用 Console.ReadLine() 读取一行,再将文本转换为整数。如果用户可能输入意料之外的内容,请使用 int.TryParse();它会报告转换是否成功,并让常见的无效输入通过正常的控制流程处理。本指南比较适用于按行读取输入的 int.Parse()、int.TryParse() 和 Convert.ToInt32()。

使用 int.Parse() 从控制台读取整数

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() 从控制台读取整数

对于交互式输入,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() 从控制台读取整数

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();它们的区别在于如何处理转换结果和特殊输入值。