C#-类型转换

C#的类型转换分为两类:隐式类型转换(implicit conversions)和显式类型转换(explicit conversions)

隐式类型转换

隐式转化就是系统默认的、不需要加以声明就可以进行的转化。在隐式转化过程中,编译器无需对转换进行详细检查就能够安全地执行。比如从int到long就是一种隐式转换。

隐式数值转换包括以下几种:

C#-类型转换_第1张图片

隐式引用转换包括以下几类:

C#-类型转换_第2张图片

显式类型转换

又叫做强制类型转换。需要用户明确的指定转换的类型

这种显式数值转换有可能丢失信息或导致异常抛出,规则如下:

  • 对于从一种整型到另外一种整型的转换,编译器对转换进行溢出检测,如果发生异常抛出OverflowException异常。这种检测还与编译器中是否设了checked选项有关。
  • 对于float,double或decimal到整型的转换,源变量的值通过舍入得到最接近的整型值作为转换结果。如果这个整型值超出目标类型的值域,将抛出OverflowException异常
  • 对于double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成无穷或负无穷。如果原double是NaN,则转换后也是NaN
  • 对于float到double或decimal的转换,源值将转换成小数形式并通过舍入取到小数点后28位。如果源值太小,则结果为0;如果太大以致不能用小数表示,或无穷和NaN,将抛出InvalidCastException异常。
  • 对于decimal到float或double的转换,小数的值通过舍入取最近的值。这种转换可能会丢失精度,但不会引起异常。

显示引用转换:

C#-类型转换_第3张图片

显示引用转换在运行时检测以确保正确。转换失败会抛出InvalidCastException

你可能感兴趣的:(类型转换)