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

9次阅读

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

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

在C#中做类型转换,尤其是字符串转整数时,int.Parse()Convert.ToInt32() 看起来功能相似,但它们的处理逻辑、适用场景和异常行为有明显区别。选错方法容易导致程序崩溃或隐藏bug

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

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

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

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

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

  • 输入为 null → 返回 0(不会报错)
  • 输入为 "" → 抛出 FormatException(和 Parse 一样)
  • 输入为 " 789 " → 成功返回 789(会自动 Trim)
  • 输入为 doublelongbool 等其他类型 → 尝试转换(比如 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 才是日常最实用、最健壮的选择。

text=ZqhQzanResources