Tabelle di conversione dei tipi in .NET

Si parla di conversione verso un tipo di dati più grande quando un valore di un certo tipo viene convertito in un altro tipo di dimensioni identiche o maggiori. Si parla di conversione verso un tipo di dati più piccolo quando un valore di un certo tipo viene convertito in un valore di un altro tipo di dimensioni inferiori. Le tabelle in questo argomento illustrano i comportamenti di entrambi i tipi di conversioni.

Conversioni di estensione

Nella tabella seguente sono elencate le conversioni verso un tipo di dati più grande che possono essere eseguite senza la perdita di informazioni.

Type Conversione senza perdita di dati in
Byte UInt16, Int16, UInt32, Int32, UInt64Int64, Single, , DoubleDecimal
SByte Int16, Int32, Int64, Single, DoubleDecimal
Int16 Int32, Int64, Single, DoubleDecimal
UInt16 UInt32, Int32, UInt64, Int64Single, , DoubleDecimal
Char UInt16, UInt32, Int32, UInt64Int64, Single, , DoubleDecimal
Int32 Int64, Double, Decimal
UInt32 Int64, UInt64, DoubleDecimal
Int64 Decimal
UInt64 Decimal
Single Double

Alcune conversioni verso il tipo di dati più grande Single o Double possono causare una perdita di precisione. Nella tabella seguente sono elencate le conversioni verso un tipo di dati più grande che possono generare una perdita di informazioni.

Type Conversione in
Int32 Single
UInt32 Single
Int64 Single, Double
UInt64 Single, Double
Decimal Single, Double

Conversioni di tipo narrowing

Alcune conversioni verso il tipo di dati più piccolo Single o Double possono causare una perdita di informazioni. Se il tipo di destinazione non è in grado di rappresentare in modo appropriato l'ordine di grandezza dell'origine, il tipo risultante viene impostato sulla costante PositiveInfinity o NegativeInfinity. PositiveInfinity è il risultato della divisione di un numero positivo per zero e viene restituito anche quando il valore di un tipo Single o Double supera il valore del campo MaxValue. NegativeInfinity è il risultato della divisione di un numero negativo per zero e viene restituito anche quando il valore di un tipo Single o Double è minore del valore del campo MinValue. Una conversione da un tipo DoubleDouble a un tipo Single potrebbe avere come risultato un valore PositiveInfinity o NegativeInfinity.

Una conversione verso un tipo di dati più piccolo può generare una perdita di informazioni anche per altri tipi di dati. Viene tuttavia generato un evento OverflowException se il valore di un tipo da convertire non rientra nell'intervallo specificato dai campi MaxValue e MinValue del tipo di destinazione e il processo di conversione viene controllato dal runtime per poter assicurare che il valore del tipo di destinazione non superi MaxValue o MinValue. Le conversioni eseguite tramite la classe System.Convert vengono sempre controllate in questo modo.

Nella tabella seguente sono elencate le conversioni che generano un evento OverflowException tramite System.Convert o qualsiasi conversione controllata se il valore del tipo convertito non rientra nell'intervallo specificato per il tipo risultante.

Type Conversione in
Byte SByte
SByte Byte, UInt16, UInt32UInt64
Int16 Byte, SByte, UInt16
UInt16 Byte, SByte, Int16
Int32 Byte, SByte, Int16, UInt16UInt32
UInt32 Byte, SByte, Int16, UInt16Int32
Int64 Byte, SByte, Int16, UInt16, Int32,UInt32 ,UInt64
UInt64 Byte, SByte, Int16, UInt16Int32, , UInt32Int64
Decimal Byte, SByte, Int16, UInt16Int32, UInt32, , Int64UInt64
Single Byte, SByte, Int16, UInt16Int32, UInt32, , Int64UInt64
Double Byte, SByte, Int16, UInt16Int32, UInt32, , Int64UInt64

Vedi anche