Таблицы преобразования типов в .NET

Расширяющее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип равного или большего размера. Сужающее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип меньшего размера. Таблицы в этом разделе описывают характеристики обоих типов преобразований.

Расширение преобразований

В следующей таблице описаны расширяющие преобразования, которые можно выполнять без потери данных.

Тип Можно без потери данных преобразовать в
Byte UInt16, Int16UInt32Int32UInt64Int64SingleDoubleDecimal
SByte Int16, , Int32SingleInt64Double,Decimal
Int16 Int32, , Int64Single, DoubleDecimal
UInt16 UInt32, Int32, UInt64Int64SingleDoubleDecimal
Char UInt16, UInt32, Int32UInt64Int64SingleDoubleDecimal
Int32 Int64, , DoubleDecimal
UInt32 Int64, , UInt64DoubleDecimal
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 возникает в результате деления положительного числа на ноль, а также в том случае, если значение типа Single или Double превышает значение поля MaxValue. NegativeInfinity возникает в результате деления отрицательного числа на ноль, а также в том случае, если значение типа Single или Double ниже значения поля MinValue. Результат преобразования из Double в Single может быть равен PositiveInfinity или NegativeInfinity.

Сужающее преобразование может также приводить к потере данных и для других типов данных. Тем не менее, если значение преобразуемого типа выходит за пределы диапазона, заданные в полях MaxValue и MinValue для целевого типа, возникает исключение OverflowException. Среда выполнения проверяет преобразование, чтобы гарантировать соблюдение ограничений MaxValue и MinValue для целевого типа. Преобразования, выполняемые с помощью класса System.Convert, всегда проверяются подобным образом.

В следующей таблице приведен список преобразований, порождающих исключение OverflowException при использовании System.Convert или любого преобразования с проверкой, если значение преобразуемого типа находится вне диапазона, определенного для результирующего типа.

Тип Можно преобразовать в
Byte SByte
SByte Byte, , UInt16UInt32UInt64
Int16 Byte, , SByteUInt16
UInt16 Byte, , SByteInt16
Int32 Byte, , SByteInt16, UInt16UInt32
UInt32 Byte, , SByteInt16, UInt16Int32
Int64 Byte, SByte, Int16, UInt16Int32, ,UInt32UInt64
UInt64 Byte, SByte, Int16UInt16Int32UInt32Int64
Decimal Byte, SByte, Int16UInt16Int32UInt32Int64UInt64
Single Byte, SByte, Int16UInt16Int32UInt32Int64UInt64
Double Byte, SByte, Int16UInt16Int32UInt32Int64UInt64

См. также