C# 类型转换
🔄 C# 类型转换(Type Conversion)
📌 目录
- 类型转换分类
- 强制转换
(T)value int.Parse()/float.Parse()Convert.ToInt32().ToString()as运算符- 各种转换方式对比表
1️⃣ 类型转换分类
| 类型 | 说明 | 示例 |
|---|---|---|
| 隐式转换 | 安全、不丢失信息 | int → float、float → double |
| 显式转换 | 可能丢失精度,需要手动指定 | float → int、double → int |
| 引用类型转换 | 类与接口之间的转换 | object → string、Father → Son |
2️⃣ 强制转换 (T)value
✔ 用法
int a = (int)3.6f; // → 3(截断)
✔ 特点
- 只能用在“数值类型”和“引用类型继承链中”
- 会抛异常:引用类型转换失败 →
InvalidCastException - 精度可能丢失
✔ 不适用
不能用于字符串转数字:
(int)"123"; // ❌ 无法编译
3️⃣ int.Parse("123")
✔ 用法
int a = int.Parse("123");
✔ 特点
- 只能处理字符串 → 数值
- 字符串格式错误会抛异常
FormatException - 不处理
null(会ArgumentNullException)
✔ 适用场景
从文本、输入框读取数字字符。
4️⃣ Convert.ToInt32(value)
✔ 用法
int a = Convert.ToInt32("123");
int b = Convert.ToInt32(null); // → 0
✔ 特点
- 能处理更多类型:
string、bool、float、double、null… - 遇到 null 不报错,返回 0
- 比
Parse()更安全
✔ 推荐场景
数据来源不确定是否为 null 时。
5️⃣ .ToString()
✔ 用法
int a = 10;
string s = a.ToString(); // "10"
✔ 特点
- 各类型 → 字符串
- 不会抛异常(除非对象本身为 null)
- 常用于 UI 输出、日志打印
⚠ 注意
object obj = null;
obj.ToString(); // ❌ NullReferenceException
6️⃣ value as T
✔ 用法
object obj = "Hello";
string s = obj as string; // "Hello"
object obj2 = 123;
string s2 = obj2 as string; // null(不会异常)
✔ 特点
- 只能用于 引用类型(class)或 nullable(如
int?) - 转换失败返回
null - 不会抛异常
✔ 适用场景
当你不确定类型但不想让程序崩溃:
MyClass mc = obj as MyClass;
if (mc != null) { ... }
7️⃣ 各转换方式对比
| 转换方式 | 适用类型 | 失败时 | 是否安全 | 常用场景 |
|---|---|---|---|---|
| (T)value | 数值、继承链的引用类型 | 抛异常 | ❌ | 数值截断、父子类强制转换 |
| Parse() | 仅字符串 | 抛异常 | ❌ | 读取用户输入 |
| Convert.ToInt32() | 几乎所有类型 | 字符串格式异常会报错;null → 0 | ✔ 比较安全 | 数据不确定时 |
| ToString() | 所有非 null 对象 | null → 异常 | ✔ | UI显示、日志、调试 |
| as | 引用类型 | 返回 null | ✔ 最安全 | 不确定对象真实类型 |
🌟 最简总结
- (T) → 强制转换 → 有风险
- Parse → 字符串解析 → 不接受 null
- Convert → 更安全 → null → 0
- ToString → 任何对象转文本
- as → 引用类型安全转换 → 失败→null,不抛异常

浙公网安备 33010602011771号