Condividi tramite


Funzioni di conversione dei tipi (Visual Basic)

Queste funzioni vengono compilate inline, ovvero il codice di conversione fa parte del codice che valuta l'espressione. A volte non esiste alcuna chiamata a una procedura per eseguire la conversione, migliorando così le prestazioni. Ogni funzione crea una coercizione di 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 l'argomento expression
CBool Tipo di dati booleano 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 Char validaString; viene convertito solo il primo carattere di un oggettoString. 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 Int32.MaxValue a (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 Int64.MaxValue a (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 CLng a virgola mobile a 64 bit con la funzione. Per altre informazioni, vedere la sezione Osservazioni. Per un esempio, vedere la sezione Esempio CInt .
CObj tipo di dati dell'oggetto Qualsiasi espressione valida.
CSByte Tipo di dati SByte SByte.MinValue (-128) fino SByte.MaxValue a (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 Int16.MaxValue a (32.767); le parti frazionarie vengono arrotondate.1

A partire da Visual Basic 15.8, Visual Basic ottimizza le prestazioni della conversione di CShort a virgola mobile a 16 bit con la 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 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 a virgola mobile a unsigned Integer 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 di CULng lunghi senza segno con la 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 di CUShort a virgola mobile a unsigned a 16 bit con la 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".

Osservazioni:

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 anche 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 quando si Boolean esegue la conversione 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, , CShortCIntCLngCSByteCUShort, CUInt, ): CULng

Questa ottimizzazione consente al codice che esegue un numero elevato di conversioni integer da eseguire fino al doppio del tempo. 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 comere 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 integer.

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

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

    Se la parte frazionaria è esattamente 0,5, la conversione integer lo arrotonda al numero intero pari più vicino. Ad esempio, 0,5 arrotonda su 0 e 1,5 e 2,5 entrambi arrotondamento 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.

    CInte differiscono dalle CLng funzioni e IntFix, 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 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 un 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 neutri 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 estesa 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 ToString(IFormatProvider) metodi e Parse(String, IFormatProvider) del tipo di tale valore. Ad esempio, usare Double.Parse quando si converte una stringa in un Doubleoggetto e si usa Double.ToString quando si converte un valore di tipo Double in una stringa.

Operatore CType

L'operatore CType accetta un secondo argomento, typenamee crea una coercizione 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 di conversione di tipo, vedere Operatore DirectCast e Operatore TryCast.

Esempio di CBool

Nell'esempio seguente viene utilizzata la CBool funzione per convertire le espressioni in Boolean valori. 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 CByte funzione per convertire un'espressione in un oggetto 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 CChar funzione per convertire il 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 deve CChar essere di tipo di Char dati o String. Non è possibile utilizzare 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 hardcoded come stringhe (come illustrato in questo esempio) non sono consigliate. Usare valori letterali data e valori letterali di ora, ad esempio #Feb 12, 1969# e #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 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 di CInt

Nell'esempio seguente viene utilizzata 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 utilizzata 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 utilizzata 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 utilizzata 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 utilizzata 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 utilizzata 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 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 CUInt

Nell'esempio seguente viene utilizzata 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 utilizzata 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 di CUShort

Nell'esempio seguente viene utilizzata 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)

Vedere anche