Erweiternde und eingrenzende Konvertierungen (Visual Basic)

Ein wichtiger Aspekt von Typkonvertierungen ist, ob das Ergebnis der Konvertierung innerhalb des Bereichs des Zieldatentyps liegt. Bei einer erweiternden Konvertierung wird ein Wert in einen Datentyp geändert, der alle möglichen Werte der ursprünglichen Daten enthalten kann. Bei einer eingrenzenden Konvertierung wird ein Wert in einen Datentyp geändert, der unter Umständen nicht alle möglichen Werte enthält.

Erweiternde Konvertierungen

In der folgenden Tabelle sind die standardmäßigen erweiternden Konvertierungen zusammengefasst.

Datentyp

Erweiterung in Datentypen 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double 2

Long

Long, Decimal, Single, Double 2

ULong

ULong, Decimal, Single, Double 2

Decimal

Decimal, Single, Double 2

Single

Single, Double

Double

Double

Beliebiger aufgelisteter Typ (Enum)

Der zugrunde liegende ganzzahlige Typ und jeder Typ, in den der zugrunde liegende Typ erweitert wird

Char

Char, String

Char-Array

Char-Array, String

Beliebiger Typ

Objekt

Beliebiger abgeleiteter Typ

Beliebiger Basistyp, der der Ableitung zugrunde liegt 3

Beliebiger Typ

Beliebige Schnittstelle, die implementiert wird

Nothing

Beliebiger Datentyp oder Objekttyp

1 Per Definition wird jeder Datentyp in sich selbst erweitert.

2 Bei Konvertierungen von Integer, UInteger, Long, ULong oder Decimal in Single bzw. Double können zwar Ungenauigkeiten, aber niemals Größenverluste auftreten. In diesem Sinne tritt kein Informationsverlust auf.

3 Es mag überraschen, dass es sich bei der Konvertierung von einem abgeleiteten Typ in einen seiner Basistypen um eine erweiternde Konvertierung handelt. Dies ist der Fall, da der abgeleitete Typ alle Member des Basistyps enthält, sodass er als eine Instanz des Basistyps qualifiziert wird. Umgekehrt enthält der Basistyp nicht die vom abgeleiteten Typ definierten neuen Member.

Erweiternde Konvertierungen sind zur Laufzeit immer erfolgreich. Datenverluste treten hier nie auf. Sie können sie stets implizit ausführen, unabhängig davon, ob die Option Strict-Anweisung für die Typüberprüfung On oder Off festlegt.

Eingrenzende Konvertierungen

Es gibt die folgenden standardmäßigen eingrenzenden Konvertierungen:

  • Konvertierungen in die umgekehrte Richtung zu den erweiternden Konvertierungen in der obigen Tabelle (mit der Ausnahme, dass jeder Typ sich in sich selbst erweitert)

  • Konvertierungen in beide Richtungen zwischen Boolean und einem beliebigen numerischen Typ

  • Konvertierungen von einem beliebigen numerischen Typ in einen beliebigen Enumerationstyp (Enum)

  • Konvertierungen in beide Richtungen zwischen String und einem beliebigen numerischen Typ, Boolean oder Date

  • Konvertierungen von einem Datentyp oder Objekttyp in einen davon abgeleiteten Typ

Eingrenzende Konvertierungen sind zur Laufzeit nicht immer erfolgreich. Sie können fehlschlagen, oder es können Datenverluste auftreten. Ein Fehler tritt auf, wenn der Zieldatentyp nicht den konvertierten Wert empfangen kann. So kann bei einer numerischen Konvertierung beispielsweise ein Überlauf auftreten. Mit dem Compiler können Sie implizit keine eingrenzende Konvertierungen ausführen, es sei denn, die Option Strict-Anweisung setzt die Typüberprüfung auf Off.

Tipp

Der Fehler für einschränkende Konvertierung wird unterdrückt für Konvertierungen von den Elementen in einer For Each…Next-Auflistung zur Schleifensteuerungsvariable. Weitere Informationen und Beispiele finden Sie im Abschnitt "Eingrenzende Konvertierungen" unter For Each...Next-Anweisung (Visual Basic).

Verwendungsmöglichkeiten für eingrenzende Konvertierungen

Sie verwenden eingrenzende Konvertierungen, wenn Sie genau wissen, dass der Ausgangswert in den Zieldatentyp konvertiert werden kann, ohne dass dabei Fehler oder Datenverluste auftreten. Wenn z. B. bekannt ist, dass String die Werte "True" oder "False" enthält, können Sie den Typ mit dem CBool-Schlüsselwort in Boolean konvertieren.

Ausnahmen während der Konvertierung

Da erweiternde Konvertierungen immer erfolgreich sind, lösen sie keine Ausnahmen aus. Eingrenzende Konvertierungen lösen bei Fehlschlagen in der Regel die folgenden Ausnahmen aus:

  • InvalidCastException, wenn keine Konvertierung zwischen den beiden Typen definiert ist

  • OverflowException, (nur bei ganzzahligen Typen) wenn der konvertierte Wert für den Zieltyp zu groß ist

Wenn in einer Klasse oder Struktur eine CType-Funktion (Visual Basic) definiert ist, die als Operator für die Konvertierung in diese oder aus dieser Klasse bzw. Struktur dient, kann diese CType-Funktion eine geeignete Ausnahme auslösen. Zusätzlich kann CType ggf. Visual Basic-Funktionen oder .NET Framework-Methoden aufrufen, die wiederum verschiedene Ausnahmen auslösen können.

Siehe auch

Aufgaben

Gewusst wie: Konvertieren eines Objekts in einen anderen Typ in Visual Basic

Referenz

Datentyp: Zusammenfassung (Visual Basic)

Funktionen für die Typkonvertierung (Visual Basic)

Konzepte

Datentypen in Visual Basic

Implizite und explizite Konvertierungen (Visual Basic)

Wertänderungen durch Konvertierungen (Visual Basic)

Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)

Arraykonvertierungen (Visual Basic)

Typenloses Programmieren in Visual Basic

Weitere Ressourcen

Typkonvertierung in Visual Basic