In Visual Basic gibt es explizite und implizite Typkonvertierungen:
CInt(), CDbl(), CStr(), DirectCast, TryCast usw.Zur Zuverlässigkeit wird empfohlen:
Option Strict On zu verwenden — dies verbietet implizite Konvertierungen und erfordert explizite Konvertierungen, um Laufzeitfehler zu vermeiden.Beispiel:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Kompilierungsfehler! a = CInt(b) ' Korrekt: Explizite Konvertierung mit möglichem Verlust des Dezimalteils 'Konvertierung von Zeichenfolgen Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
Welche Risiken sind mit der Verwendung der Funktion Val() zur Konvertierung einer Zeichenfolge in eine Zahl verbunden und warum wird sie oft nicht empfohlen?
Antwort:
Val() konvertiert nur den numerischen Anfang der Zeichenfolge bis zum ersten nicht-numerischen Zeichen. Wenn die Zeichenfolge mit einem Buchstaben oder Sonderzeichen beginnt, gibt sie 0 zurück. Dies kann Fehler verbergen, wenn eine vollständige Wertkonvertierung erwartet wurde.
Beispiel:
Dim value1 = Val("123abc") ' gibt 123 zurück Dim value2 = Val("abc123") ' gibt 0 zurück ! ' Besser: Integer.TryParse("abc123", val)
Geschichte
In einem ERP-System wurden Werte aus der Datenbank gelesen, und aufgrund einer impliziten Konvertierung von Zeichenfolgen in Integer ohne Überprüfung wurde eine Ausnahme bei ungültigen Daten ausgelöst. Dies stoppte die gesamte Berichtsmodularbeit.
Geschichte
Bei der Integration mit einem veralteten System verwendete der Programmierer Val zur Konvertierung von Zeichenfolgen, wobei einige Zeichenfolgen mit Buchstaben (z. B. "A1234") begannen. Ergebnis — Verlust von Identifikatoren, die fälschlicherweise als 0 interpretiert wurden, und Fehler im Kundenbindungssystem.
Geschichte
Ein Entwickler verwendete DirectCast zum Konvertieren von Objekten, ohne die Typkompatibilität zu überprüfen. Bei ankommenden Objekten unerwarteten Typs wurde eine InvalidCastException ausgelöst und die Datenverarbeitungskette brach ab.