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

Расширяющее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип равного или большего размера.Widening conversion occurs when a value of one type is converted to another type that is of equal or greater size. Сужающее преобразование — это преобразование, при котором значение одного типа преобразуется в другой тип меньшего размера.A narrowing conversion occurs when a value of one type is converted to a value of another type that is of a smaller size. Таблицы в этом разделе описывают характеристики обоих типов преобразований.The tables in this topic illustrate the behaviors exhibited by both types of conversions.

расширяющие преобразованияWidening Conversions

В следующей таблице описаны расширяющие преобразования, которые можно выполнять без потери данных.The following table describes the widening conversions that can be performed without the loss of information.

ТипType Можно без потери данных преобразовать вCan be converted without data loss to
Byte UInt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double, DecimalUInt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double, Decimal
SByte Int16, Int32, Int64, Single, Double, DecimalInt16, Int32, Int64, Single, Double, Decimal
Int16 Int32, Int64, Single, Double, DecimalInt32, Int64, Single, Double, Decimal
UInt16 UInt32, Int32, UInt64, Int64, Single, Double, DecimalUInt32, Int32, UInt64, Int64, Single, Double, Decimal
Char UInt16, UInt32, Int32, UInt64, Int64, Single, Double, DecimalUInt16, UInt32, Int32, UInt64, Int64, Single, Double, Decimal
Int32 Int64, Double, DecimalInt64, Double, Decimal
UInt32 Int64, UInt64, Double, DecimalInt64, UInt64, Double, Decimal
Int64 Decimal
UInt64 Decimal
Single Double

Некоторые расширяющие преобразования к типу Single или Double могут привести к потере точности.Some widening conversions to Single or Double can cause a loss of precision. В следующей таблице описаны расширяющие преобразования, которые могут привести к частичной потере данных.The following table describes the widening conversions that sometimes result in a loss of information.

ТипType Можно преобразовать вCan be converted to
Int32 Single
UInt32 Single
Int64 Single, DoubleSingle, Double
UInt64 Single, DoubleSingle, Double
Decimal Single, DoubleSingle, Double

сужающие преобразованияNarrowing Conversions

Сужающее преобразование к типу Single или Double может привести к потере данных.A narrowing conversion to Single or Double can cause a loss of information. Если целевой тип не позволяет должным образом выразить порядок величины исходного типа, то результирующий тип будет приравнен к константе PositiveInfinity или NegativeInfinity.If the target type cannot properly express the magnitude of the source, the resulting type is set to the constant PositiveInfinity or NegativeInfinity. PositiveInfinity возникает в результате деления положительного числа на ноль, а также в том случае, если значение типа Single или Double превышает значение поля MaxValue.PositiveInfinity results from dividing a positive number by zero and is also returned when the value of a Single or Double exceeds the value of the MaxValue field. NegativeInfinity возникает в результате деления отрицательного числа на ноль, а также в том случае, если значение типа Single или Double ниже значения поля MinValue.NegativeInfinity results from dividing a negative number by zero and is also returned when the value of a Single or Double falls below the value of the MinValue field. Результат преобразования из Double в Single может быть равен PositiveInfinity или NegativeInfinity.A conversion from a Double to a Single might result in PositiveInfinity or NegativeInfinity.

Сужающее преобразование может также приводить к потере данных и для других типов данных.A narrowing conversion can also result in a loss of information for other data types. Тем не менее, если значение преобразуемого типа выходит за пределы диапазона, заданные в полях MaxValue и MinValue для целевого типа, возникает исключение OverflowException. Среда выполнения проверяет преобразование, чтобы гарантировать соблюдение ограничений MaxValue и MinValue для целевого типа.However, an OverflowException is thrown if the value of a type that is being converted falls outside of the range specified by the target type's MaxValue and MinValue fields, and the conversion is checked by the runtime to ensure that the value of the target type does not exceed its MaxValue or MinValue. Преобразования, выполняемые с помощью класса System.Convert, всегда проверяются подобным образом.Conversions that are performed with the System.Convert class are always checked in this manner.

В следующей таблице приведен список преобразований, порождающих исключение OverflowException при использовании System.Convert или любого преобразования с проверкой, если значение преобразуемого типа находится вне диапазона, определенного для результирующего типа.The following table lists conversions that throw an OverflowException using System.Convert or any checked conversion if the value of the type being converted is outside the defined range of the resulting type.

ТипType Можно преобразовать вCan be converted to
Byte SByte
SByte Byte, UInt16, UInt32, UInt64Byte, UInt16, UInt32, UInt64
Int16 Byte, SByte, UInt16Byte, SByte, UInt16
UInt16 Byte, SByte, Int16Byte, SByte, Int16
Int32 Byte, SByte, Int16, UInt16,UInt32Byte, SByte, Int16, UInt16,UInt32
UInt32 Byte, SByte, Int16, UInt16, Int32Byte, SByte, Int16, UInt16, Int32
Int64 Byte, SByte, Int16, UInt16, Int32,UInt32,UInt64Byte, SByte, Int16, UInt16, Int32,UInt32,UInt64
UInt64 Byte, SByte, Int16, UInt16, Int32, UInt32, Int64Byte, SByte, Int16, UInt16, Int32, UInt32, Int64
Decimal Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64
Single Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64
Double Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64

См. такжеSee also