一、基本定义
C# 类型转换是将数据从一种类型转换为另一种类型的过程,分为 隐式转换 和 显式转换 两类。
- 强类型语言特性:C# 要求变量类型在编译时确定,类型转换需满足兼容性或显式规则。
- 目的:处理不同数据类型间的交互(如运算、赋值等),确保类型兼容性。
二、隐式类型转换
由编译器自动完成,无需额外代码,适用于 无数据丢失且类型兼容 的场景。
- 规则与场景
- 小范围类型 → 大范围类型(如 int → long、float → double)。
- 派生类 → 基类(面向对象继承关系)。
- 混合运算时,自动提升至更大范围或更高精度类型(如 int + float → float)。
- 示例
int a = 100;
double d = a; // int → double,隐式完成:ml-citation{ref="2,4" data="citationList"}
三、显式类型转换(强制转换)
需手动指定,存在 数据丢失或异常风险,适用于类型不兼容但逻辑可行的场景。
- 规则与场景
- 大范围类型 → 小范围类型(如 double → int,小数部分截断)。
- 父类对象 → 子类对象(需确保对象实际类型兼容)。
- 非兼容类型间转换(需通过 Convert、Parse 等方法实现)。
- 语法与示例
double d = 3.14;
int i = (int)d; // 显式转换,结果为3:ml-citation{ref="1,4" data="citationList"}
object obj = "Hello";
string s = (string)obj; // 强制转换引用类型:ml-citation{ref="3,8" data="citationList"}
四、关键注意事项
- 数据安全与精度
- 显式转换可能导致数据丢失(如 3.99 → 3)或抛出 InvalidCastException。
- 高精度类型(如 decimal)需显式处理浮点运算的舍入误差。
- 类型兼容性验证
- 使用 as 操作符安全转换引用类型(失败返回 null)。
- 数值类型转换推荐 TryParse 方法避免异常(如 int.TryParse)。
- 动态类型特性
- dynamic 类型绕过编译时检查,运行时动态解析类型,灵活性高但风险大。
五、总结
C# 类型转换通过 隐式转换(安全自动)和 显式转换(需手动干预)实现数据类型的兼容性处理,需根据场景权衡安全性与效率。开发中需优先选择隐式转换,显式操作时需严格验证类型兼容性以避免运行时错误。