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:

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 und CUShort) 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 und CLng unterscheiden sich von den Funktionen Int und Fix, die den gebrochenen Anteil einer Zahl nicht runden, sondern abschneiden. Außerdem entspricht der Datentyp des von Fix und Int 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 einen Date-Wert von Visual Basic 6.0 in einen Date-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ßt CStr 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ünglichen Date-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) und Parse(String, IFormatProvider) des Typs dieses Werts verwendet werden. Verwenden Sie also beispielsweise Double.Parse, wenn Sie eine Zeichenfolge in einen Wert vom Typ Double konvertieren möchten, und Double.ToString, wenn Sie einen Wert vom Typ in Double 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)

Weitere Informationen