ProgrammatieOntwikkelaar van zakelijke applicaties, ERP/CRM ingenieur

Hoe wordt de invoer van gebruikers verwerkt en de numerieke invoer gecontroleerd in Visual Basic? Waar moet je op letten bij het omzetten van strings naar getallen?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Visual Basic worden gegevens vaak door de gebruiker ingevoerd als strings (bijvoorbeeld via TextBox of InputBox), maar voor verdere verwerking moeten ze worden omgezet naar numerieke types. In eerdere versies van VB werd ongestrikte conversie toegepast via Val of CInt, wat leidde tot duidelijke en verborgen fouten bij onjuiste gegevens. Er werd aangenomen dat de string altijd een correcte waarde bevatte, maar in de praktijk geven gebruikers verkeerde symbolen in, wat fouten of onjuiste conversies kan veroorzaken.

Het probleem is de onbeschermde conversie, die kan leiden tot een crash van de applicatie of onjuiste berekeningen. Bijvoorbeeld, Val("1a") retourneert 1, wat onverwacht kan zijn. Het gebruik van TryParse en strikte invoerformaatcontrole helpt dergelijke fouten te voorkomen en de invoer correct te verwerken.

De oplossing is het toepassen van de methode Integer.TryParse (of Double.TryParse en anderen), die alleen True retourneert bij een succesvolle conversie.

Voorbeeldcode:

Dim input As String = TextBox1.Text Dim value As Integer If Integer.TryParse(input, value) Then ' Een correct getal is ingevoerd, de variabele value bevat de waarde Else MessageBox.Show("Voer alstublieft een geheel getal in") End If

Belangrijke kenmerken:

  • TryParse verwerkt fouten veilig, gooit geen uitzondering
  • Val en CInt zijn niet geschikt voor gebruikersgegevens zonder controle
  • Het is belangrijk om rekening te houden met lokalisatie (decimale scheidingstekens), gebruik de juiste overloads van TryParse

Trick vragen.

Wat is het gevaar van de functie Val bij het verwerken van gebruikersinvoer?

Val retourneert een numerieke waarde tot het eerste ongeldige symbool en gooit geen fout, wat kan leiden tot onjuiste logica.

Dim n = Val("12abc") ' Retouneert 12, terwijl de string ongeldig is

Wat is het verschil tussen CInt en Integer.Parse?

CInt voert afronding uit met banker's rounding, terwijl Integer.Parse een exacte overeenkomst van de string met het getal vereist en een uitzondering gooit bij een fout.

Waarom retourneert TryParse niet altijd True voor de string "1,234"?

Het resultaat hangt af van de regionale instellingen van Windows: soms is de decimale scheiding het komma, soms de punt. Het is belangrijk om het formaat expliciet op te geven:

Dim number As Double Double.TryParse("1,234", NumberStyles.Any, CultureInfo.InvariantCulture, number)

Typische fouten en anti-patronen

  • Gebruik van Val of directe conversie zonder controle
  • Geen rekening houden met regionale instellingen
  • Het overslaan van de controle van gegevens verkregen uit TextBox of InputBox

Voorbeeld uit het leven

Negatief geval

De financiële module accepteerde gegevens via InputBox, verwerkte deze via Val, som 10,5 werd 10 in sommige gevallen (de komma werd niet herkend, terwijl de punt niet was ingevoerd).

Voordelen:

  • Weinig code, ziet er eenvoudig uit

Nadelen:

  • Gegevensverlies, rekent fouten

Positief geval

Overstap naar TryParse rekening houdend met culturele instellingen en validatie van het invoerveld.

Voordelen:

  • Garantie voor correctheid van het getal
  • Eenvoudige berichtgeving voor de gebruiker als de gegevens ongeldig zijn

Nadelen:

  • Meer code nodig, foutafhandeling en indicatie van cultuur indien nodig