Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширяющее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип равного или большего размера. Сужающее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип меньшего размера. Таблицы в этом разделе описывают характеристики обоих типов преобразований.
Расширение преобразований
В следующей таблице описаны расширяющие преобразования, которые можно выполнять без потери данных.
| Тип | Можно без потери данных преобразовать в |
|---|---|
| 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 |