In Visual Basic zijn er expliciete en impliciete type conversies:
CInt(), CDbl(), CStr(), DirectCast, TryCast, enz.Voor betrouwbaarheid wordt aangeraden:
Option Strict On — dit voorkomt impliciete conversies en vereist expliciete conversies, wat fouten tijdens runtime voorkomt.Voorbeeld:
Option Strict On Dim a As Integer Dim b As Double = 4.5 'a = b ' Compilatiefout! a = CInt(b) ' Correct: Expliciete conversie met mogelijke verlies van het decimale deel 'Conversie van strings Dim s As String = "123" Dim n As Integer = Integer.Parse(s)
Welke risico's zijn verbonden aan het gebruik van de functie Val() voor de conversie van een string naar een getal, en waarom wordt deze vaak niet aanbevolen?
Antwoord:
Val() converteert alleen het numerieke begin van de string tot het eerste niet-numerieke teken. Als de string begint met een letter of speciaal teken, retourneert het 0. Dit kan fouten verbergen als een volledige waarde-conversie werd verwacht.
Voorbeeld:
Dim value1 = Val("123abc") ' geeft 123 Dim value2 = Val("abc123") ' geeft 0 ! ' Het is beter om te gebruiken: Integer.TryParse("abc123", val)
Verhaal
In een ERP-systeem werden waarden uit de database gelezen, en door een impliciete conversie van string naar Integer zonder controle werd er een uitzondering opgegooid bij incorrecte gegevens. Dit stopte de werking van het hele rapportagemodule.
Verhaal
Bij de integratie met een verouderd systeem gebruikte de programmeur Val voor de conversie van strings, en een deel van de strings begon met letters (bijv. "A1234"). Het resultaat — verlies van identificatoren, die verkeerd werden geïnterpreteerd als 0, en storing in de klantenloyaliteit.
Verhaal
De ontwikkelaar gebruikte DirectCast bij het casten van objecten zonder de compatibiliteit van types te controleren. Bij ontvangst van een object van een onverwacht type, werd er een InvalidCastException opgegooid en brak de dataverwerkingsketen.