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