类型转换表

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

扩大转换

下表描述了可以执行的且不会丢失信息的扩大转换。

类型

可在不丢失数据的情况下转换为

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, Double, Decimal

Int64

Decimal

UInt64

Decimal

Single

Double

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

类型

可转换为

Int32

Single

UInt32

Single

Int64

Single, Double

UInt64

Single, Double

Decimal

Single, Double

收缩转换

目标为 SingleDouble 的收缩转换可能会导致丢失信息。 如果目标类型无法正确表达源类型的大小,则结果类型将设置为常数 PositiveInfinity 或 NegativeInfinity。 PositiveInfinity 是正数除以 0 的结果,并且该值还将在 SingleDouble 的值超过 MaxValue 字段的值时返回。 NegativeInfinity 是负数除以 0 的结果,并且该值还将在 SingleDouble 的值低于 MinValue 字段的值时返回。 从 DoubleSingle 的转换可能会生成 PositiveInfinity 或 NegativeInfinity。

收缩转换还可能导致其他数据类型的信息丢失。 但是,如果转换的某类型值不在目标类型的 MaxValue 和 MinValue 字段指定的范围内,并且运行时检查该转换以确保目标类型的值不超出它的 MaxValue 或 MinValue,则会引发 OverflowException。 将始终以这种方式检查使用 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

请参见

参考

System.Convert

概念

.NET Framework 中的类型转换