Cenni preliminari sulla conversione
Aggiornamento: novembre 2007
A ogni valore è associato un tipo che definisce attributi quali la quantità di spazio allocata per il valore, l'intervallo di valori possibili supportati e i membri che rende disponibili. Numerosi valori possono essere espressi mediante tipi diversi. Il valore 4, ad esempio, può essere espresso come valore integer o come valore a virgola mobile. Mediante la conversione viene creato un valore in un nuovo tipo equivalente al valore del tipo precedente, ma non viene necessariamente mantenuta l'identità, o il valore esatto, dei due oggetti. Oltre al supporto della conversione implicita, .NET Framework supporta la conversione esplicita mediante la classe System.Convert che fornisce metodi di conversione dei tipi.
Nota: |
---|
Anche i singoli linguaggi possono fornire modalità per l'esecuzione di conversioni esplicite. In C# vengono ad esempio utilizzati gli operatori di cast mentre in Visual Basic vengono utilizzate funzioni di conversione implementate dal compilatore quali CType, CInt e DirectCast. |
Common Language Runtime supporta sia le conversioni di ampliamento che quelle di restrizione. È possibile, ad esempio, convertire un valore rappresentato come integer con segno a 32 bit in un valore integer con segno a 64 bit. In questo caso si parla di conversione di ampliamento. La conversione opposta, ovvero da 64 bit a 32 bit, viene definita conversione di restrizione. In una conversione verso un tipo di dati più grande le informazioni non vengono mai perse (diversamente dalla precisione), mentre possono verificarsi perdite durante una conversione verso un tipo di dati più piccolo. Per l'elenco delle conversioni di ampliamento, vedere la sezione Tabelle di conversione dei tipi.
Nell'esempio riportato di seguito viene illustrata una conversione verso un tipo di dati più grande in cui il valore Int32MyInt viene convertito in un valore Int64. Questa conversione viene eseguita in modo implicito, senza l'utilizzo della classe Convert o di qualsiasi altro metodo di conversione o operatore.
Dim MyInt As Integer = 1234567891
Dim MyBigInt As Long = MyInt
Console.WriteLine(MyBigInt) ' Displays 1234567891
int MyInt = 1234567891;
long MyBigInt = MyInt;
Console.WriteLine(MyBigInt); // Displays 1234567891
Nell'esempio riportato di seguito viene illustrata una conversione verso un tipo di dati più piccolo in cui il valore Int64MyBigInt viene convertito in un valore Int32. Tale conversione deve essere eseguita sempre in modo esplicito in C#, così come in Visual Basic se è impostato Option Strict. In questo esempio viene chiamato il metodo ToInt32 per eseguire la conversione.
Dim MyBigInt As Long = 1234567891
' exception handler: narrowing conversions can overflow
Try
Dim MyInt As Integer = Convert.ToInt32(MyBigInt)
Console.WriteLine(MyInt) ' Displays 1234567891
Catch e As OverflowException
Console.WriteLine("Unable to convert {0} to an integer.", _
MyBigInt)
End Try
long MyBigInt = 1234567891;
// exception handler: narrowing conversions can overflow
try
{
int MyInt = Convert.ToInt32(MyBigInt);
Console.WriteLine(MyBigInt); // Displays 1234567891
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert {0} to an integer.",
MyBigInt);
}
Vedere anche
Concetti
Tabelle di conversione dei tipi
Conversione di tipi di dati mediante System.Convert