Funktionen für die Typkonvertierung (Visual Basic)
Diese Funktionen werden inline kompiliert. Das bedeutet, dass der Konvertierungscode Bestandteil des Codes für die Auswertung des Ausdrucks ist. Manchmal wird die Konvertierung ohne Aufruf einer Prozedur erreicht, was die Leistung verbessert. Jede Funktion wandelt einen Ausdruck in einen bestimmten Datentyp um.
Syntax
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)
Teil
expression
Erforderlich. Ein beliebiger Ausdruck des Quelldatentyps.
Datentyp des Rückgabewerts
Der Funktionsname bestimmt den Datentyp des zurückgegebenen Werts, wie in der folgenden Tabelle zu sehen:
Funktionsname | Rückgabedatentyp | Bereich für expression -Argument |
---|---|---|
CBool |
Boolean-Datentyp | Ein beliebiger gültiger Char - oder String -Ausdruck oder ein beliebiger gültiger numerischer Ausdruck. |
CByte |
Byte-Datentyp | Byte.MinValue (0) bis Byte.MaxValue (255) (ohne Vorzeichen). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma zu Byte mit der Funktion CByte . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CChar |
Char-Datentyp | Ein beliebiger gültiger Char - oder String -Ausdruck. Nur das erste Zeichen einer Zeichenfolge (String ) wird konvertiert. Der Wert kann zwischen 0 und 65.535 (ohne Vorzeichen) liegen. |
CDate |
Date-Datentyp | Eine beliebige gültige Darstellung eines Datums und einer Uhrzeit. |
CDbl |
Double-Datentyp | -1,79769313486231570E+308 bis -4,94065645841246544E-324 für negative Werte, 4,94065645841246544E-324 bis 1,79769313486231570E+308 für positive Werte. |
CDec |
Decimal-Datentyp | +/-79.228.162.514.264.337.593.543.950.335 für nullskalierte Zahlen (also für Zahlen ohne Dezimalstellen). Bei Zahlen mit 28 Dezimalstellen ist der Bereich +/-7,9228162514264337593543950335. Die kleinstmögliche Zahl ungleich null ist 0,0000000000000000000000000001 (+/-1E-28). |
CInt |
Integer-Datentyp | Int32.MinValue (-2.147.483.648) bis Int32.MaxValue (2.147.483.647). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in Ganzzahl mit der Funktion CInt . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CLng |
Long-Datentyp | Int64.MinValue (-9.223.372.036.854.775.808) bis Int64.MaxValue (9.223.372.036.854.775.807). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in 64-Bit-Ganzzahl mit der Funktion CLng . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CObj |
Object Data Type | Beliebiger gültiger Ausdruck. |
CSByte |
SByte-Datentyp | SByte.MinValue (-128) bis SByte.MaxValue (127). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in Byte mit Vorzeichen mit der Funktion CSByte . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CShort |
Short-Datentyp | Int16.MinValue (-32.768) bis Int16.MaxValue (32.767). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in 16-Bit-Ganzzahl mit der Funktion CShort . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CSng |
Single-Datentyp | -3,402823E+38 bis -1,401298E-45 für negative Werte. 1,401298E-45 bis 3,402823E+38 für positive Werte. |
CStr |
String-Datentyp | Rückgaben für CStr sind Abhängig vom expression -Argument. Weitere Informationen finden Sie unter Rückgabewerte für die CStr-Funktion (Visual Basic). |
CUInt |
UInteger-Datentyp | UInt32.MinValue (0) bis UInt32.MaxValue (4.294.967.295) (ohne Vorzeichen). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in Ganzzahl ohne Vorzeichen mit der Funktion CUInt . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CULng |
ULong-Datentyp | UInt64.MinValue (0) bis UInt64.MaxValue (18.446.744.073.709.551.615) (ohne Vorzeichen). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in Long Integer ohne Vorzeichen mit der Funktion CULng . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
CUShort |
UShort-Datentyp | UInt16.MinValue (0) bis UInt16.MaxValue (65.535) (ohne Vorzeichen). Gebrochene Anteile werden gerundet.1 Ab Visual Basic 15.8 optimiert Visual Basic die Leistung der Konvertierung von Gleitkomma in 16-Bit-Ganzzahl ohne Vorzeichen mit der Funktion CUShort . Weitere Informationen finden Sie im Abschnitt Bemerkungen. Ein Beispiel finden Sie im Abschnitt CInt-Beispiel. |
1 Für gebrochene Anteile wird unter Umständen eine spezielle Rundungsform verwendet: die so genannte unverzerrte Rundung. Weitere Informationen finden Sie im Abschnitt „Bemerkungen“.
Bemerkungen
Grundsätzlich sollten Sie bevorzugt die Visual Basic-Typkonvertierungsfunktionen verwenden anstatt .NET Framework-Methoden wie ToString()
– entweder für die Klasse Convert oder für eine einzelne Typstruktur oder Klasse. Die Visual Basic-Funktionen sind für die optimale Interaktion mit Visual Basic-Code konzipiert und machen Ihren Quellcode außerdem kürzer und leichter lesbar. Darüber hinaus liefern die .NET Framework-Konvertierungsmethoden nicht immer die gleichen Ergebnisse wie die Visual Basic-Funktionen. Dies ist beispielsweise bei der Konvertierung von Boolean
in Integer
der Fall. Weitere Informationen finden Sie unter Problembehandlung bei Datentypen (Visual Basic).
Ab Visual Basic 15.8 profitieren Sie bei der Konvertierung von Gleitkomma in Ganzzahl von einer optimierten Leistung, wenn Sie den von den folgenden Methoden zurückgegebenen Single- oder Double-Wert an eine der Konvertierungsfunktion für ganze Zahlen (CByte
, CShort
, CInt
, CLng
, CSByte
, CUShort
, CUInt
, CULng
) übergeben:
- Conversion.Fix(Double)
- Conversion.Fix(Object)
- Conversion.Fix(Single)
- Conversion.Int(Double)
- Conversion.Int(Object)
- Conversion.Int(Single)
- Math.Ceiling(Double)
- Math.Floor(Double)
- Math.Round(Double)
- Math.Truncate(Double)
Mit dieser Optimierung kann Code, der eine große Anzahl ganzzahliger Konvertierungen durchführt, bis zu zweimal so schnell ausgeführt werden. Diese optimierten Konvertierungen von Gleitkomma in Ganzzahl werden im folgenden Beispiel veranschaulicht:
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
Verhalten
Koersion: Im Allgemeinen können Sie mithilfe der Datentyp-Konvertierungsfunktionen das Ergebnis eines Vorgangs in einen bestimmten Datentyp umwandeln (anstatt in den Standarddatentyp). Verwenden Sie beispielsweise
CDec
, um in Fällen, in denen normalerweise Arithmetik mit einfacher Genauigkeit, Arithmetik mit doppelter Genauigkeit oder Ganzzahlarithmetik verwendet wird, dezimale Arithmetik zu erzwingen.Nicht erfolgreiche Konvertierungen: Wenn der an die Funktion übergebene Ausdruck (
expression
) außerhalb des Bereichs des Datentyps liegt, in den er konvertiert werden soll, tritt eine Überlaufausnahme (OverflowException) auf.Gebrochene Anteile: Wenn Sie einen nicht integralen Wert in einen integralen Typ konvertieren, entfernen die Konvertierungsfunktion für ganze Zahlen (
CByte
,CInt
,CLng
,CSByte
,CShort
,CUInt
,CULng
undCUShort
) den gebrochenen Anteil und runden den Wert auf die nächste ganze Zahl.Wenn der gebrochene Anteil genau 0,5 ist, wird er auf die nächste gerade ganze Zahl gerundet. So wird 0,5 beispielsweise auf 0 gerundet, während 1,5 und 2,5 jeweils auf 2 gerundet werden. Dies wird manchmal als unverzerrte Rundung bezeichnet und dient dazu, einen Trend zu kompensieren, der sich bei der Addition vieler solcher Zahlen ergeben kann.
CInt
undCLng
unterscheiden sich von den Funktionen Int und Fix, die den gebrochenen Anteil einer Zahl nicht runden, sondern abschneiden. Außerdem entspricht der Datentyp des vonFix
undInt
zurückgegebenen Werts immer dem Datentyp der Eingabe.Datums-/Uhrzeitkonvertierungen: Verwenden Sie die Funktion IsDate, um zu ermitteln, ob ein Wert in ein Datum und eine Uhrzeit konvertiert werden kann.
CDate
erkennt Datums- und Uhrzeitliterale, aber keine numerischen Werte. Wenn Sie einenDate
-Wert von Visual Basic 6.0 in einenDate
-Wert von Visual Basic 2005 (oder höher) konvertieren möchten, können Sie die Methode DateTime.FromOADate verwenden.Neutrale Datums-/Uhrzeitwerte: Der Date-Datentyp (Visual Basic) enthält immer sowohl Datums- als auch Uhrzeitinformationen. Für die Typkonvertierung betrachtet Visual Basic „1/1/0001“ (1. Januar des Jahres 1) als neutralen Wert für das Datum und „00:00:00:00“ (Mitternacht) als neutralen Wert für die Uhrzeit. Wenn Sie einen
Date
-Wert in eine Zeichenfolge konvertieren, schließtCStr
keine neutralen Werte in die resultierende Zeichenfolge ein. Ein Beispiel: Wenn Sie#January 1, 0001 9:30:00#
in eine Zeichenfolge konvertieren, lautet das Ergebnis „9:30:00 AM“. Die Datumsinformationen werden also unterdrückt. Sie sind allerdings weiterhin im ursprünglichenDate
-Wert vorhanden und können mit Funktionen wie DatePart wiederhergestellt werden.Berücksichtigung der Kultur: Typkonvertierungsfunktionen mit Zeichenfolgen führen Konvertierungen basierend auf den aktuellen Kultureinstellungen für die Anwendung durch.
CDate
erkennt beispielsweise Datumsformate gemäß der Gebietsschemaeinstellung Ihres Systems. Tag, Monat und Jahr müssen in der richtigen Reihenfolge für Ihr Gebietsschema angegeben werden. Andernfalls wird das Datum möglicherweise nicht richtig interpretiert. Ein langes Datumsformat wird nicht erkannt, wenn es eine Zeichenfolge für den Wochentag enthält (beispielsweise „Mittwoch“).Die Visual Basic-Typkonvertierungsfunktionen können nicht verwendet werden, um etwas in eine oder aus einer Zeichenfolgendarstellung eines Werts zu konvertieren, dessen Format nicht dem Format Ihres Gebietsschemas entspricht. Hierzu müssen die Methoden
ToString(IFormatProvider)
undParse(String, IFormatProvider)
des Typs dieses Werts verwendet werden. Verwenden Sie also beispielsweise Double.Parse, wenn Sie eine Zeichenfolge in einen Wert vom TypDouble
konvertieren möchten, und Double.ToString, wenn Sie einen Wert vom Typ inDouble
eine Zeichenfolge konvertieren möchten.
CType Function
Die CType-Funktion akzeptiert ein zweites Argument (typename
) und wandelt expression
in typename
um. typename
kann hierbei ein beliebiger Datentyp bzw. eine beliebige Struktur, Klasse oder Schnittstelle sein, für den bzw. für die eine gültige Konvertierung vorhanden ist.
Einen Vergleich von CType
mit den anderen Schlüsselwörtern für die Typkonvertierung finden Sie unter DirectCast-Operator (Visual Basic) sowie unter TryCast-Operator (Visual Basic).
CBool-Beispiel
Im folgenden Beispiel wird die Funktion CBool
verwendet, um Ausdrücke in Boolean
-Werte zu konvertieren: Wenn ein Ausdruck als Wert ungleich null ausgewertet wird, gibt CBool
den Wert True
zurück. Andernfalls wird False
zurückgegeben.
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)
CByte-Beispiel
Im folgenden Beispiel wird die Funktion CByte
verwendet, um einen Ausdruck in Byte
-zu konvertieren:
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
CChar-Beispiel
Im folgenden Beispiel wird die Funktion CChar
verwendet, um das erste Zeichen eines Ausdrucks vom Typ String
in den Typ Char
zu konvertieren:
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)
Der Datentyp des Eingabearguments für CChar
muss Char
oder String
sein. CChar
kann nicht verwendet werden, um eine Zahl in ein Zeichen zu konvertieren, da CChar
keinen numerischen Datentyp akzeptiert. Im folgenden Beispiel wird eine Zahl abgerufen, die einen Codepunkt (Zeichencode) darstellt, und in das entsprechende Zeichen konvertiert. Hierzu ruft die Funktion InputBox die Zeichenfolge der Ziffern ab, CInt
konvertiert die Zeichenfolge in den Typ Integer
, und ChrW
konvertiert die Zahl in den Typ 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)
CDate-Beispiel
Im folgenden Beispiel wird die Funktion CDate
verwendet, um Zeichenfolgen in Date
-Werte zu konvertieren: Im Allgemeinen wird davon abgeraten, Datums- und Uhrzeitangaben wie in diesem Beispiel als Zeichenfolgen hartzucodieren. Verwenden Sie stattdessen Datums- und Uhrzeitliterale wie „#Feb 12, 1969#“ und „#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)
CDbl-Beispiel
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)
CDec-Beispiel
Im folgenden Beispiel wird die Funktion CDec
verwendet, um einen numerischen Wert in Decimal
zu konvertieren:
Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)
CInt-Beispiel
Im folgenden Beispiel wird die Funktion CInt
verwendet, um einen Wert in Integer
zu konvertieren:
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
CLng-Beispiel
Im folgenden Beispiel wird die Funktion CLng
verwendet, um Werte in Long
zu konvertieren:
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)
CObj-Beispiel
Im folgenden Beispiel wird die Funktion CObj
verwendet, um einen numerischen Wert in Object
zu konvertieren. Die Variable Object
selbst enthält nur einen Vier-Byte-Zeiger, der auf den ihr zugewiesenen Double
-Wert verweist.
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)
CSByte-Beispiel
Im folgenden Beispiel wird die Funktion CSByte
verwendet, um einen numerischen Wert in SByte
zu konvertieren:
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
CShort-Beispiel
Im folgenden Beispiel wird die Funktion CShort
verwendet, um einen numerischen Wert in Short
zu konvertieren:
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
CSng-Beispiel
Im folgenden Beispiel wird die Funktion CSng
verwendet, um Werte in Single
zu konvertieren:
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)
CStr-Beispiel
Im folgenden Beispiel wird die Funktion CStr
verwendet, um einen numerischen Wert in String
zu konvertieren:
Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)
Im folgenden Beispiel wird die Funktion CStr
verwendet, um Date
-Werte in String
-Werte zu konvertieren:
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
rendert einen Date
-Wert immer im Standardkurzformat für das aktuelle Gebietsschema (beispielsweise „6/15/2003 4:35:47 PM“). CStr
unterdrückt jedoch die neutralen Werte „1/1/0001“ für das Datum und „00:00:00“ für die Uhrzeit.
Ausführlichere Informationen zu den Werten, die von CStr
zurückgegeben werden, finden Sie unter Rückgabewerte für die CStr-Funktion (Visual Basic).
CUInt-Beispiel
Im folgenden Beispiel wird die Funktion CUInt
verwendet, um einen numerischen Wert in UInteger
zu konvertieren:
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
CULng-Beispiel
Im folgenden Beispiel wird die Funktion CULng
verwendet, um einen numerischen Wert in ULong
zu konvertieren:
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
CUShort-Beispiel
Im folgenden Beispiel wird die Funktion CUShort
verwendet, um einen numerischen Wert in UShort
zu konvertieren:
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)