int.Parse()严格解析非null且格式正确的字符串,null或空白抛异常;Convert.ToInt32()对null返回0、自动Trim空白,但空字符串仍抛异常;int.TryParse()最安全,通过bool返回成功与否,推荐用于不可靠输入。

在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); } // 输出 123if (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 才是日常最实用、最健壮的选择。










