Funzioni di conversione del tipo (Visual Basic)

Queste funzioni vengono compilate inline, ovvero il codice di conversione fa parte del codice che valuta l'espressione. In alcuni casi non è presente alcuna chiamata a una routine per eseguire la conversione, migliorando così le prestazioni. Ogni funzione collega 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)

Parte

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

Tipo di dati 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 expression l'argomento
CBool Tipo di dati Boolean Qualsiasi espressione valida Char o String numerica.
CByte Tipo di dati Byte Byte.MinValue da (0) a Byte.MaxValue (255) (senza segno); le parti frazionarie vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione da virgola mobile a byte con la CByte funzione. Per altre informazioni, vedere la sezione Osservazioni . Per un esempio, vedere la sezione Esempio CInt .
CChar Tipo di dati Char Qualsiasi espressione o String validaChar; viene convertito solo il primo carattere di un String oggetto . Il valore può essere compreso tra 0 e 65535 (senza segno).
CDate Tipo di dati Date Qualsiasi rappresentazione valida di una data e un'ora.
CDbl Tipo di dati Double -1.79769313486231570E+308 da -4.94065645841246544E-324 per 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 i numeri con 28 posizioni decimali, l'intervallo è +/-7.9228162514264337593543950335. Il numero minimo possibile diverso da zero è 0,00000000000000000000000000001 (+/-1E-28).
CInt Tipo di dati Integer Int32.MinValue (-2.147.483.648) fino a Int32.MaxValue (2.147.483.647); le parti frazionarie vengono arrotondate.1

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

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

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

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

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione di interi senza segno a virgola mobile con la CUInt funzione. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio CInt .
CULng Tipo di dati ULong UInt64.MinValue da (0) a UInt64.MaxValue (18.446.744.073.709.551.615) (senza segno); le parti frazionarie vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione a un integer long senza segno con la CULng funzione. Per altre informazioni, vedere la sezione Osservazioni . Per un esempio, vedere la sezione Esempio CInt .
CUShort Tipo di dati UShort UInt16.MinValue da (0) a UInt16.MaxValue (65.535) (senza segno); le parti frazionarie vengono arrotondate.1

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

1 Parti frazionarie possono essere soggette a un tipo speciale di arrotondamento chiamato arrotondamento del banchiere. Per altre informazioni, vedere "Osservazioni".

Commenti

Come regola, è consigliabile usare le funzioni di conversione dei tipi di Visual Basic in preferenza per i metodi di .NET Framework, ad ToString()esempio , nella Convert classe o in una singola struttura di tipi o classe. Le funzioni di Visual Basic sono progettate per un'interazione ottimale con il codice Visual Basic e semplificano la lettura del codice sorgente. Inoltre, i metodi di conversione di .NET Framework non producono sempre gli stessi risultati delle funzioni di Visual Basic, ad esempio durante la conversione Boolean in 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 Single valore o Double restituito dai metodi seguenti a una delle funzioni di conversione integer (CByte, CShort, , CLngCSByteCInt, CUShort, CUInt, ): CULng

Questa ottimizzazione consente al codice che esegue un numero elevato di conversioni integer per l'esecuzione fino a due volte più veloce. 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 del tipo di dati per creare una coercizione del risultato di un'operazione in un determinato tipo di dati anziché nel tipo di dati predefinito. Ad esempio, usare CDec per forzare l'aritmetica decimale nei casi in cui si verifica normalmente l'aritmetica a precisione singola, a precisione doppia o integer.

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

  • Parti frazionarie. Quando si converte un valore non irreversibile in un tipo integrale, le funzioni di conversione integer (CByte, CInt, CLngCUIntCULngCSByteCShorte CUShort) rimuovono la parte frazionaria e arrotondano il valore all'intero più vicino.

    Se la parte frazionaria è esattamente 0,5, la conversione integer esegue l'arrotondamento all'intero pari più vicino. Ad esempio, 0,5 arrotonda a 0 e 1,5 e 2,5 entrambi arrotondamenti su 2. Questo è talvolta chiamato arrotondamento del banchiere, e il suo scopo è quello di compensare un pregiudizio che potrebbe accumularsi quando si aggiungono molti tali numeri insieme.

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

  • Conversioni di data/ora. Usare la IsDate funzione per determinare se un valore può essere convertito in una data e un'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 Date valore in Visual Basic 2005 o versioni successive, è possibile utilizzare il DateTime.FromOADate metodo .

  • Valori di data/ora neutrali. 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 valore neutro per la data e 00:00:00 (mezzanotte) come valore neutro per l'ora. Se si converte un Date valore in una stringa, CStr non include valori neutrali nella stringa risultante. Ad esempio, se si esegue la conversione #January 1, 0001 9:30:00# in una stringa, il risultato è "9:30:00 AM" e le informazioni sulla data vengono eliminate. Tuttavia, le informazioni sulla data sono ancora presenti nel valore originale Date e possono essere recuperate con funzioni come DatePart la funzione.

  • 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 per le impostazioni locali oppure la data potrebbe non essere interpretata correttamente. Un formato di data lunga non viene riconosciuto se contiene una stringa day-of-week, ad esempio "Mercoledì".

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

CType Function

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

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

Esempio di CBool

Nell'esempio seguente viene usata la CBool funzione per convertire le espressioni in Boolean valori. Se un'espressione restituisce un valore diverso da zero, restituisce True; in caso contrario, CBool 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 usata la funzione per convertire un'espressione CByte in un Byteoggetto .

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 usata la funzione per convertire il CChar primo carattere di un'espressione String in un Char tipo.

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 da cui CChar deve essere di tipo di Char dati o String. Non è possibile usare CChar per convertire un numero in un carattere, perché CChar non è possibile accettare un tipo di dati numerico. Nell'esempio seguente viene ottenuto un numero che rappresenta un punto di codice (codice carattere) e lo converte nel carattere corrispondente. Usa la InputBox funzione per ottenere la stringa di cifre, CInt per convertire la stringa in tipo Integere 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 usata la CDate funzione per convertire le stringhe in Date valori. In generale, le date e le ore di codifica hardcode come stringhe (come illustrato in questo esempio) non sono consigliate. Usare valori letterali di data e valori letterali ora, ad esempio #Feb 12, 1969# e #4:45:23 PM#, invece.

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 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 CDec

Nell'esempio seguente viene usata la CDec funzione 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 CInt

Nell'esempio seguente viene usata la CInt funzione 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 usata la CLng funzione 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 usata la CObj funzione per convertire un valore numerico in Object. La Object variabile stessa contiene solo un puntatore a quattro byte, che punta al Double valore 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 usata la CSByte funzione 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 usata la CShort funzione 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 usata la CSng funzione 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 CStr

Nell'esempio seguente viene usata la CStr funzione 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 usata la CStr funzione per convertire Date i valori in String valori.

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 Date valore nel formato breve standard per le impostazioni locali correnti, ad esempio "6/15/2003 4:35:47 PM". Tuttavia, CStr elimina i valori neutrali di 1/1/0001 per la data e le 00:00:00 per l'ora.

Per altre informazioni sui valori restituiti da CStr, vedere Valori restituiti per la funzione CStr.

Esempio CUInt

Nell'esempio seguente viene usata la CUInt funzione 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 culng

Nell'esempio seguente viene usata la CULng funzione 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 cuShort

Nell'esempio seguente viene usata la CUShort funzione 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