HOWTO · Csharp
在 C# 中将数值、整数文本及受支持的值转换为 int
在 C# 中,根据输入类型选择整数转换方式:对数值使用 (int) 强制转换,对表示整数的文本使用 int.Parse(),或对受支持的值使用 Convert.ToInt32()。
本页内容
在 C# 中,应根据输入类型选择转换方式:数值可使用 (int) 强制转换,表示整数的文本可使用 int.Parse(),需要转换的受支持值可使用 Convert.ToInt32()。这些方法对小数、null 以及无法转换的输入处理方式不同。
使用 (int) 强制转换将数值转换为 int
如果值已经是数值类型,直接使用数值类型转换即可。强制转换表达式 会转换该值,而不会解析文本。对于浮点数和 decimal 值,转换为 int 时会朝零截去小数部分:42.9 会变为 42,而 -42.9 会变为 -42。此示例将一个数值转换后打印结果。
using System;
class Program
{
static void Main()
{
double value = 42.9;
int result = (int)value;
Console.WriteLine(result);
}
}
42
强制转换适用于兼容的数值类型;它不会解析像 "42" 这样的字符串。如果浮点值超出 int 的范围,未检查转换的结果未指定。在已检查的上下文中,超出范围的转换会引发 OverflowException。如果需要在溢出时报告错误,可以使用 checked((int)value),也可以在转换前验证数值范围。请参阅 Microsoft 的强制转换和类型转换指南。
使用 int.Parse() 解析整数文本
当输入是包含整数的字符串时(例如从表单或配置中读取的文本),请使用 int.Parse()。如果文本符合受支持的整数格式,该方法会返回一个 int。此示例解析字符串并打印得到的数字。
using System;
class Program
{
static void Main()
{
string text = "42";
int result = int.Parse(text);
Console.WriteLine(result);
}
}
42
int.Parse() 解析的是字符串,不能转换任意文本或数值对象。字符串为 null 时会引发 ArgumentNullException;文本不是有效整数时会引发 FormatException;数值超出 int 范围时会引发 OverflowException。对于可能无效的用户输入,请使用 int.TryParse() 并处理其布尔返回值,以免解析失败中断操作。默认解析规则使用当前区域性;如果文本来自数字格式已知的数据源,请指定相应的区域性。
使用 Convert.ToInt32() 将受支持的值转换为 int
当输入可能是受支持的基元值(例如整数、布尔值、浮点数、decimal 值或字符串)时,Convert.ToInt32() 很有用。它不能转换所有类型;能否转换取决于可用的重载和 IConvertible 实现。输入为字符串时,它会解析整数文本。输入为浮点数或 decimal 值时,它会将数值舍入到最接近的整数,且中点采用舍入到偶数的规则;这与 (int) 的截去小数部分不同。
using System;
class Program
{
static void Main()
{
double value = 42.5;
int result = Convert.ToInt32(value);
Console.WriteLine(result);
}
}
42
对于这个中点值,舍入到偶数会得到 42;值为 43.5 时会得到 44。引用为 null 时,Convert.ToInt32() 会返回 0;不受支持的转换、格式错误的字符串以及超出 int 范围的值可能引发异常。只有在转换规则适合输入时才选择此方法;输入明确是整数文本时使用 int.Parse(),需要截去数值小数部分时则使用强制转换。