C#怎么进行类型转换 C# int.Parse与Convert.ToInt32区别方法

来源:这里教程网 时间:2026-02-21 17:40:14 作者:

在C#中做类型转换,尤其是字符串转整数时,

int.Parse()
Convert.ToInt32()
看起来功能相似,但它们的处理逻辑、适用场景和异常行为有明显区别。选错方法容易导致程序崩溃或隐藏bug。

int.Parse():严格解析,空值直接报错

int.Parse()
只接受非 null、格式正确的字符串,内部调用的是
Number.ParseInt32()
。它不处理 null 或空白字符串,遇到就抛出
ArgumentNullException
FormatException

输入为
null
→ 抛出
ArgumentNullException
输入为
""
"  "
(纯空白)→ 抛出
FormatException
输入为
"123"
"-456"
→ 正常返回对应整数
输入为
"12.3"
"abc"
→ 抛出
FormatException

Convert.ToInt32():更宽容,自动处理 null 和部分类型

Convert.ToInt32()
是一个“通用转换器”,底层会先判断参数类型再分发处理。对字符串,它内部其实也调用了
int.Parse()
,但多了一层 null 判断:

输入为
null
→ 返回
0
(不会报错)
输入为
""
→ 抛出
FormatException
(和 Parse 一样)
输入为
"  789  "
→ 成功返回
789
(会自动 Trim)
输入为
double
long
bool
等其他类型 → 尝试转换(比如
true → 1

更安全的选择:int.TryParse()

生产代码中,**强烈推荐优先使用

int.TryParse()
**。它不抛异常,而是通过返回
bool
表示是否成功,并用
out
参数输出结果:

成功时返回
true
,并把值写入 out 变量
失败时返回
false
,out 变量为
0
(不会影响原有变量)
适合用户输入、配置读取等不可控来源 示例:

if (int.TryParse("123", out int result)) { Console.WriteLine(result); } // 输出 123

if (int.TryParse("abc", out int x)) { /* 不会执行 */ } else { Console.WriteLine("转换失败"); }

什么时候该用哪个?

确定字符串一定合法且非 null → 可用
int.Parse()
(语义明确)
输入可能为 null,但你希望 null 转成 0 → 用
Convert.ToInt32()
输入来源不可靠(如 TextBox、JSON、文件)→ 必须用
int.TryParse()
需要自定义格式(如带千分位、不同文化习惯)→ 用
int.Parse(string, IFormatProvider)
TryParse
的重载

基本上就这些。别被名字迷惑——

Convert
并不比
Parse
“更高级”,只是职责不同;而
TryParse
才是日常最实用、最健壮的选择。

相关推荐