.NET 中的类型转换表

当一种类型的值转换为大小相等或更大的另一类型时,将发生扩大转换。 当一种类型的值转换为较小的另一种类型时,将发生收缩转换。 本主题中的表格解释了这两种转换类型的行为。

扩大转换

下表列出了执行不会导致信息丢失的扩大转换。

类型 可在不丢失数据的情况下转换为
Byte UInt16Int16UInt32Int32UInt64Int64SingleDoubleDecimal
SByte Int16, Int32, Int64, Single, Double, Decimal
Int16 Int32, Int64, Single, Double, Decimal
UInt16 UInt32, Int32, UInt64, Int64, Single, Double, Decimal
Char UInt16, UInt32, Int32, UInt64, Int64, Single, Double, Decimal
Int32 Int64, Double, Decimal
UInt32 Int64, UInt64, Double, Decimal
Int64 Decimal
UInt64 Decimal
Single Double

一些目标为 SingleDouble 的扩大转换可能会导致精度丢失。 下面的表格描述了有时会导致信息丢失的扩大转换。

类型 可转换为
Int32 Single
UInt32 Single
Int64 SingleDouble
UInt64 SingleDouble
Decimal SingleDouble

收缩转换

目标为 SingleDouble 的收缩转换可能会导致信息丢失。 如果目标类型无法正确表达源类型的大小,则结果类型将设置为常数 PositiveInfinityNegativeInfinityPositiveInfinity 是正数除以 0 的结果,也在 SingleDouble 的值大于 MaxValue 字段的值时返回。 NegativeInfinity 是负数除以 0 的结果,也在 SingleDouble 的值小于 MinValue 字段的值时返回。 从 Double 转换到 Single 可能会导致 PositiveInfinityNegativeInfinity

收缩转换还可能导致其他数据类型的信息丢失。 不过,如果要转换的类型值不在目标类型的 MaxValueMinValue 字段指定的范围内,就会抛出 OverflowException,并且运行时会检查转换,以确保目标类型的值不超出它的 MaxValueMinValue。 始终以这种方式检查使用 System.Convert 类执行的转换。

下表列出了使用 System.Convert 抛出 OverflowException 的转换,或要转换类型的值不在生成类型的定义范围内的任何已检查转换。

类型 可转换为
Byte SByte
SByte Byte, UInt16, UInt32, UInt64
Int16 Byte, SByte, UInt16
UInt16 Byte, SByte, Int16
Int32 Byte, SByte, Int16, UInt16,UInt32
UInt32 Byte, SByte, Int16, UInt16, Int32
Int64 Byte, SByte, Int16, UInt16, Int32,UInt32,UInt64
UInt64 Byte, SByte, Int16, UInt16, Int32, UInt32, Int64
Decimal Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64
Single Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64
Double Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64

另请参阅