Таблицы преобразования типов в .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 |