Skip to content

C# 里把值收成 int,常见三条路:(int)、int.Parse / int.TryParse、Convert.ToInt32。能转什么、遇到 null 和小数时怎么走,不一样。

各自吃什么 ​

  • (int):只能是数字类型,如 float、double、int、uint。
  • int.Parse / int.TryParse:只能是整型的十进制字符串(123、"-1")。"1.5" 对 Parse 会抛格式异常,TryParse 返回 false,out 为 0。
  • Convert.ToInt32:更宽,数字、bool、DateTime、字符串都能试。

null ​

(int) 和 int.Parse 都不接受 null,直接异常。

Convert.ToInt32(null) 返回 0。它先判断空,空就 0,否则再走类似 Parse 的路径。

int.TryParse 遇到解析失败(包括不合适的输入)返回 false,out 为 0,不抛。

小数怎么取整 ​

只有 (int) 和 Convert.ToInt32 能从浮点转到 int。

  • (int)1.499 → 1,(int)1.5 → 1,截掉小数。
  • Convert.ToInt32(1.499d) → 1,Convert.ToInt32(1.5d) → 2,按四舍五入(银行家舍入在 .NET 里对中点还有细节,但 1.5 这类常见例子是进位)。

不要用 Parse 去吃 "1.5",那不是整型字符串。

溢出 ​

把超出 Int32 范围的值转进来时,Convert.ToInt32 和 int.Parse 会抛溢出。(int) 强制转换不抛,结果是截断后的值,可能完全对不上原意(例如得到 -1 这类表象),所以更危险。

怎么选 ​

  1. 已经是数字类型,只想截整数部分:(int)。
  2. 确定是整型字符串,失败就该抛或分支:Parse / TryParse。
  3. 类型杂、还可能是 null:Convert.ToInt32,并清楚「空会变成 0」。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win