Tabelas de conversão de tipos no .NET

Conversões de expansão ocorrem quando um valor de um tipo é convertido em outro tipo de tamanho igual ou maior. Conversões de redução ocorrem quando um valor de um tipo é convertido em um valor de outro tipo de tamanho menor. As tabelas neste tópico ilustram os comportamentos exibidos por ambos os tipos de conversões.

Conversões de expansão

A tabela a seguir descreve as conversões de expansão que podem ser executadas sem perda de informações.

Tipo Pode ser convertido sem perda de dados para
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, UInt64, Double, Decimal
Int64 Decimal
UInt64 Decimal
Single Double

Algumas conversões de expansão para Single ou Double podem causar perda de precisão. A tabela a seguir descreve as conversões de expansão que, às vezes, resultam em perda de informações.

Tipo Pode ser convertido para
Int32 Single
UInt32 Single
Int64 Single, Double
UInt64 Single, Double
Decimal Single, Double

Conversões de restrição

Uma conversão de redução para Single ou Double pode causar perda de informações. Se o tipo de destino não puder expressar corretamente a magnitude da origem, o tipo resultante será definido como a constante PositiveInfinity ou NegativeInfinity. PositiveInfinity resulta da divisão de um número positivo por zero, e também é retornado quando o valor de um Single ou Double ultrapassar o valor do campo MaxValue. NegativeInfinity resulta da divisão de um número negativo por zero, e também é retornado quando o valor de um Single ou Double fica abaixo do valor do campo MinValue. Uma conversão de um Double em um Single pode resultar em PositiveInfinity ou NegativeInfinity.

Uma conversão de redução também pode resultar em perda de informações para outros tipos de dados. No entanto, OverflowException será lançada se o valor de um tipo que está sendo convertido ficar fora do intervalo especificado pelos campos MaxValue e MinValue do tipo de destino, e a conversão será verificada pelo runtime para garantir que o valor do tipo de destino não ultrapasse MaxValue ou MinValue. Conversões executadas com a classe System.Convert sempre são verificadas dessa maneira.

A tabela a seguir lista conversões que lançam OverflowException usando System.Convert ou qualquer conversão selecionada se o valor do tipo que está sendo convertido estiver fora do intervalo definido pelo tipo resultante.

Tipo Pode ser convertido para
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

Confira também