Funzioni di conversione del tipo (Visual Basic)

Queste funzioni vengono compilate inline, vale a dire che il codice di conversione fa parte del codice che valuta l'espressione. A volte non viene eseguita la chiamata a una routine per realizzare la conversione e questo migliora le prestazioni. Ogni funzione assegna forzatamente un'espressione a un tipo di dati specifico.

Sintassi

CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)

In parte

expression
Obbligatorio. Qualsiasi espressione del tipo di dati di origine.

Tipo di dati del valore restituito

Il nome della funzione determina il tipo di dati del valore restituito, come illustrato nella tabella seguente.

Nome della funzione Tipo di dati restituito Intervallo per l'argomento expression
CBool Tipo di dati Boolean Qualsiasi Char o String o espressione numerica valida.
CByte Tipo di dati Byte Da Byte.MinValue (0) a Byte.MaxValue (255) (senza segno); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a byte con la funzione CByte. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CChar Tipo di dati Char Qualsiasi espressione Char o String valida. Viene convertito solo il primo carattere di String. Il valore può essere compreso tra 0 e 65535 (senza segno).
CDate Tipo di dati Date Qualsiasi rappresentazione di data e ora valida.
CDbl Tipo di dati Double Da -1.79769313486231570E+308 a -4.94065645841246544E-324 per i valori negativi; da 4.94065645841246544E-324 a 1.79769313486231570E+308 per i valori positivi.
CDec Tipo di dati Decimal +/-79,228,162,514,264,337,593,543,950,335 per numeri con scala zero, ovvero numeri senza cifre decimali. Per numeri con 28 cifre decimali, l'intervallo è +/-7.9228162514264337593543950335. Il numero più piccolo possibile diverso da zero è 0,0000000000000000000000000001 (+/-1E-28).
CInt Tipo di dati integer Da Int32.MinValue (-2.147.483.648) fino a Int32.MaxValue (2.147.483.647); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer con la funzione CInt. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CLng Tipo di dati Long Da Int64.MinValue (-9.223.372.036.854.775.808) fino a Int64.MaxValue (9.223.372.036.854.775.807); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer a 64 bit con la funzione CLng. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CObj Object Data Type Qualsiasi espressione valida.
CSByte Tipo di dati SByte Da SByte.MinValue (-128) fino a SByte.MaxValue (127); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a byte con segno con la funzione CSByte. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CShort Tipo di dati Short Da Int16.MinValue (-32,768) fino a Int16.MaxValue (32,767); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer a 16 bit con la funzione CShort. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CSng Tipo di dati Single Da -3.402823E+38 fino a -1.401298E-45 per valori negativi; da 1,401298E-45 fino a 3,402823E+38 per valori positivi.
CStr Tipo di dati String Restituisce per CStr a seconda dall'argomento expression. Vedere Valori restituiti per la funzione CStr.
CUInt Tipo di dati UInteger Da UInt32.MinValue (0) a UInt32.MaxValue (4,294,967,295) (senza segno); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer senza segno con la funzione CUInt. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CULng Tipo di dati ULong Da UInt64.MinValue (0) a UInt64.MaxValue (18,446,744,073,709,551,615) (senza segno); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer senza segno con la funzione CULng. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.
CUShort Tipo di dati UShort Da UInt16.MinValue (0) a UInt16.MaxValue (65,535) (senza segno); le frazioni vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a Integer a 16 bit senza segno con la funzione CUShort. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio di CInt.

1 Le frazioni possono essere soggette a un tipo speciale di arrotondamento chiamato arrotondamento al numero pari più vicino. Per ulteriori informazioni, vedere la sezione "Osservazioni".

Osservazioni:

Come regola, è consigliabile usare le funzioni di conversione del tipo di Visual Basic in preferenza per i metodi di .NET Framework, ad esempio ToString(), nella classe Convert o in una singola struttura o classe del tipo. Le funzioni di Visual Basic sono progettate per un'interazione ottimale con il codice di Visual Basic, inoltre accorciano e semplificano la lettura del codice sorgente. In aggiunta, i metodi di conversione di .NET Framework non producono sempre gli stessi risultati delle funzioni di Visual Basic, ad esempio quando si esegue la conversione da Boolean a Integer. Per altre informazioni, vedere Risoluzione dei problemi relativi ai tipi di dati.

A partire da Visual Basic 15.8, le prestazioni della conversione da virgola mobile a Integer vengono ottimizzate quando si passa il valore di Single o Double restituito dai metodi seguenti a una delle funzioni di conversione a Integer (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng):

Questa ottimizzazione consente un'esecuzione più rapida, fino a due volte più rapida, del codice che esegue un numero elevato di conversioni ai numeri interi. L'esempio seguente illustra queste conversioni ottimizzate da virgola mobile a Integer:

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

Comportamento

  • Coercizione. In generale, è possibile usare le funzioni di conversione dei tipi di dati per assegnare forzatamente il risultato di un'operazione in un determinato tipo di dati anziché per il tipo di dati predefinito. Ad esempio, usare CDec per forzare l'aritmetica decimale nei casi in cui si verifica normalmente un'aritmetica a precisione singola, precisione doppia o intera.

  • Conversioni non riuscite. Se expression passato alla funzione non è compreso nell'intervallo del tipo di dati in cui deve essere convertito, si verifica OverflowException.

  • Frazioni. Quando si converte un valore non integrale in un tipo integrale, le funzioni di conversione a Integer (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng e CUShort) rimuovono la frazione e arrotondano il valore all'Integer più vicino.

    Se la frazione è esattamente 0,5, la funzione di conversione Integer lo arrotonda al numero Integer pari più vicino. Ad esempio, 0,5 viene arrotondato a 0 e 1,5 e 2,5 vengono entrambi arrotondati a 2. Questo è talvolta chiamato arrotondamento al numero pari più vicino, e il suo scopo è quello di compensare una distorsione che potrebbe accumularsi quando si aggiungono molti numeri di questo tipo insieme.

    CInt e CLng differiscono dalle funzioni Int e Fix, che troncano, anziché arrotondare, la frazione di un numero. Inoltre, Fix e Int restituiscono sempre un valore dello stesso tipo di dati passato.

  • Conversioni di data/ora. Usare la funzione IsDate per determinare se un valore può essere convertito in una data e ora. CDate riconosce valori letterali di data e valori letterali di ora, ma non valori numerici. Per convertire un valore di Visual Basic 6.0 Date in un valore in Visual Basic 2005 o delle versioni successive Date, è possibile utilizzare il metodo DateTime.FromOADate.

  • Valori di data/ora neutro. Il tipo di dati Date contiene sempre informazioni su data e ora. Ai fini della conversione del tipo, Visual Basic considera 1/1/0001 (1 gennaio dell'anno 1) come un valore neutro per la data e 00:00:00 (mezzanotte) come valore neutro per l'ora. Se si converte un valore Date in una stringa, CStr non include valori neutri nella stringa risultante. Ad esempio, se si esegue la conversione di #January 1, 0001 9:30:00# in una stringa, il risultato è "09:30:00" e le informazioni sulla data vengono eliminate. Tuttavia, le informazioni sulla data sono ancora presenti nel valore Date originale e possono essere recuperate con funzioni come la funzione DatePart.

  • Sensibilità alle impostazioni cultura. Le funzioni di conversione dei tipi che coinvolgono le stringhe eseguono conversioni in base alle impostazioni cultura correnti per l'applicazione. Ad esempio, CDate riconosce i formati di data in base all'impostazione delle impostazioni locali del sistema. È necessario specificare il giorno, il mese e l'anno nell'ordine corretto in base alle impostazioni locali oppure la data potrebbe non essere interpretata correttamente. Un formato di data esteso non viene riconosciuto se contiene una stringa giorno della settimana, ad esempio "Mercoledì".

    Se è necessario eseguire la conversione in o da una rappresentazione di stringa di un valore in un formato diverso da quello specificato dalle impostazioni locali, non è possibile utilizzare le funzioni di conversione dei tipi di Visual Basic. A tale scopo, usare i metodi ToString(IFormatProvider) e Parse(String, IFormatProvider) di tale tipo di valore. Ad esempio, usare Double.Parse quando si converte una stringa in Double e si usa Double.ToString quando si converte un valore di tipo Double in una stringa.

CType Function

La funzione CType accetta un secondo argomento, typename, e applica forzatamente expression in typename, dove typename può essere qualsiasi tipo di dati, struttura, classe o interfaccia in cui esiste una conversione valida.

Per un confronto di CType con le altre parole chiave della conversione dei tipi, vedere Operatore DirectCast e Operatore TryCast.

Esempio di CBool

Nell'esempio seguente viene utilizzata la funzione CBool per convertire le espressioni in valori Boolean. Se un'espressione restituisce un valore diverso da zero, CBool restituisce True; in caso contrario, restituisce False.

Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)

Esempio di CByte

Nell'esempio seguente viene utilizzata la funzione CByte per convertire un'espressione in Byte.

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

Esempio di CChar

Nell'esempio seguente viene utilizzata la funzione CChar per convertire il primo carattere di un'espressione String in un tipo Char.

Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)

L'argomento di input in CChar deve essere del tipo di dati Char o String. Non è possibile utilizzare CChar per convertire un numero in un carattere, perché CChar non può accettare un tipo di dati numerico. Nell'esempio seguente si ottiene un numero che rappresenta un punto di codice (codice carattere) e lo converte nel carattere corrispondente. Usa la funzione InputBox per ottenere la stringa di cifre, CInt per convertire la stringa in tipo Integer e ChrW per convertire il numero in tipo Char.

Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)

Esempio di CDate

Nell'esempio seguente viene utilizzata la funzione CDate per convertire le stringhe in valori Date. In generale, le date e le ore impostati come stringhe hardcoded (come illustrato in questo esempio) non sono consigliate. Usare valori letterali di data e valori letterali di ora, ad esempio #Feb 12, 1969# and #4:45:23 PM#.

Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)

Esempio di CDbl

Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)

Esempio di CDec

Nell'esempio seguente viene utilizzata la funzione CDec per convertire un valore numerico in Decimal.

Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

Esempio di CInt

Nell'esempio seguente viene utilizzata la funzione CInt per convertire un valore in Integer.

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

Esempio di CLng

Nell'esempio seguente viene utilizzata la funzione CLng per convertire i valori in Long.

Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)

Esempio di CObj

Nell'esempio seguente viene utilizzata la funzione CObj per convertire un valore numerico in Object. La variabile Object stessa contiene solo un puntatore a quattro byte, che punta al valore Double ad esso assegnato.

Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)

Esempio di CSByte

Nell'esempio seguente viene utilizzata la funzione CSByte per convertire un valore numerico in SByte.

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

Esempio di CShort

Nell'esempio seguente viene utilizzata la funzione CShort per convertire un valore numerico in Short.

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

Esempio di CSng

Nell'esempio seguente viene utilizzata la funzione CSng per convertire i valori in Single.

Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)

Esempio di CStr

Nell'esempio seguente viene utilizzata la funzione CStr per convertire un valore numerico in String.

Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

Nell'esempio seguente viene utilizzata la funzione CStr per convertire i valori in Date in valori String.

Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)

CStr esegue sempre il rendering di un valore Date nel formato breve standard per le impostazioni locali correnti, ad esempio "6/15/2003 4:35:47 PM". Tuttavia, CStr elimina i valori neutri di 1/1/0001 per la data e le 00:00:00:00 per l'ora.

Per altri dettagli sui valori restituiti da CStr, vedere Valori restituiti per la funzione CStr.

Esempio di CUInt

Nell'esempio seguente viene utilizzata la funzione CUInt per convertire un valore numerico in UInteger.

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

Esempio di CUInt

Nell'esempio seguente viene utilizzata la funzione CULng per convertire un valore numerico in ULong.

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

Esempio di CUShort

Nell'esempio seguente viene utilizzata la funzione CUShort per convertire un valore numerico in UShort.

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

Vedi anche