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 |