Bij het verwerken van gebruikersinvoer is het cruciaal om typeconversiefouten te voorkomen wanneer een gebruiker bijvoorbeeld geen getal invoert in TextBox. Dit is belangrijk voor de stabiliteit van de applicatie.
Achtergrond van de vraag:
In VB6 en VB.NET leidden typeconversiefouten (bijvoorbeeld met CInt of Val) tot onplezierige situaties. Later kwamen er veiligere methoden zoals Integer.TryParse beschikbaar.
Probleem:
Bij het proberen om onjuiste gegevens (letters, speciale symbolen, lege string) om te zetten, werpen standaardmethoden (CInt, CDbl) een uitzondering. Dit kan ertoe leiden dat de applicatie crasht.
Oplossing:
Gebruik voor veilige conversie TryParse. Dit retourneert een logisch succes van de conversie van string naar getal en voorkomt uitzonderingen.
Voorbeeldcode:
Dim input As String = TextBox1.Text Dim number As Integer If Integer.TryParse(input, number) Then MessageBox.Show($"U heeft het getal ingevoerd: {number}") Else MessageBox.Show("Fout: er is geen getal ingevoerd") End If
Belangrijke kenmerken:
TryParse gooit geen uitzonderingen bij mislukkingWat retourneert de functie Val("123abc") en waarom kan dit gevaarlijk zijn?
Val("123abc") retourneert 123, negeert niet-numerieke symbolen na het getal, wat kan leiden tot fouten als de gebruiker per ongeluk een extra teken invoert.
Kan een lege string worden geconverteerd met CInt("")?
Nee, de functie werpt een InvalidCastException uitzondering.
Welke benadering moet worden gekozen voor drijvende-komma getallen met lokalisatie in gedachten?
Gebruik Double.TryParse met opgegeven CultureInfo, aangezien in sommige culturen de komma , een decimaalscheiding is, terwijl in andere dit een punt . is.
Dim value As Double Dim isParsed = Double.TryParse("3,14", NumberStyles.Any, CultureInfo.CurrentCulture, value)
Val om een getal te krijgen met onvoorspelbare resultatenCInt zonder inhoudsanalyseDe ontwikkelaar zet direct de tekst van het veld om naar een getal: Dim n = CInt(TextBox1.Text) zonder controle.
Voordelen:
Nadelen:
TryParse wordt gebruikt met melding aan de gebruiker over onjuiste invoer (zie voorbeeld hierboven).
Voordelen:
Nadelen: