.NET 中的类型转换表
当一种类型的值转换为大小相等或更大的另一类型时,将发生扩大转换。 当一种类型的值转换为较小的另一种类型时,将发生收缩转换。 本主题中的表格解释了这两种转换类型的行为。
扩大转换
下表列出了执行不会导致信息丢失的扩大转换。
类型 | 可在不丢失数据的情况下转换为 |
---|---|
Byte | UInt16、Int16、UInt32、Int32、UInt64、Int64、Single、Double、Decimal |
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 |
一些目标为 Single 或 Double 的扩大转换可能会导致精度丢失。 下面的表格描述了有时会导致信息丢失的扩大转换。
类型 | 可转换为 |
---|---|
Int32 | Single |
UInt32 | Single |
Int64 | Single,Double |
UInt64 | Single,Double |
Decimal | Single,Double |
收缩转换
目标为 Single 或 Double 的收缩转换可能会导致信息丢失。 如果目标类型无法正确表达源类型的大小,则结果类型将设置为常数 PositiveInfinity
或 NegativeInfinity
。 PositiveInfinity
是正数除以 0 的结果,也在 Single 或 Double 的值大于 MaxValue
字段的值时返回。 NegativeInfinity
是负数除以 0 的结果,也在 Single 或 Double 的值小于 MinValue
字段的值时返回。 从 Double 转换到 Single 可能会导致 PositiveInfinity
或 NegativeInfinity
。
收缩转换还可能导致其他数据类型的信息丢失。 不过,如果要转换的类型值不在目标类型的 MaxValue
和 MinValue
字段指定的范围内,就会抛出 OverflowException,并且运行时会检查转换,以确保目标类型的值不超出它的 MaxValue
或 MinValue
。 始终以这种方式检查使用 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 |