Oefening: de methode TryParse() onderzoeken
- 12 minuten
Wanneer u met gegevens werkt, moet u soms tekenreeksgegevens converteren naar een numeriek gegevenstype. Zoals u in de vorige les hebt geleerd, omdat het gegevenstype tekenreeks een niet-numerieke waarde kan bevatten, is het mogelijk dat het uitvoeren van een conversie van een string naar een numeriek gegevenstype een runtimefout veroorzaakt.
Bijvoorbeeld de volgende code:
string name = "Bob";
Console.WriteLine(int.Parse(name));
Hiermee wordt de volgende uitzondering veroorzaakt:
System.FormatException: 'Input string was not in a correct format.'
Gebruik de methode TryParse() voor het doeltype om een indelingsfout te voorkomen.
TryParse() gebruiken
De methode TryParse() doet een aantal dingen tegelijk:
- Er wordt geprobeerd een tekenreeks te parseren in het opgegeven numerieke gegevenstype.
- Als dit lukt, wordt de geconverteerde waarde opgeslagen in een outparameter, zoals wordt uitgelegd in de volgende sectie.
- Er wordt een
boolgeretourneerd om aan te geven of de actie is geslaagd of mislukt.
U kunt de Booleaanse retourwaarde gebruiken om actie te ondernemen op de waarde (zoals het uitvoeren van een bepaalde berekening) of een bericht weergeven als de parseringsbewerking is mislukt.
Notitie
In deze oefening gebruikt u het int gegevenstype, maar er is een vergelijkbare TryParse() methode beschikbaar voor alle numerieke gegevenstypen.
Uitvoerparameters
Methoden kunnen een waarde retourneren of "void" retourneren, wat betekent dat ze geen waarde retourneren. Methoden kunnen ook waarden retourneren via out parameters, die net als een invoerparameter worden gedefinieerd, maar het out trefwoord bevatten.
TryParse() een string omzetten naar een int
Verwijder of gebruik de operator
//voor regelopmerking om alle code uit de vorige oefeningen als commentaar te geven.Werk uw code als volgt bij in de Visual Studio Code-editor:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Bekijk deze regel van code:
if (int.TryParse(value, out result))Wanneer u een methode aanroept met een
outparameter, moet u het trefwoordoutvóór de variabele gebruiken, die de waarde bevat. Deoutparameter wordt toegewezen aan deresultvariabele in de code(int.TryParse(value,out result). Vervolgens kunt u de waarde gebruiken die deoutparameter in de rest van de code bevat met behulp van de variabeleresult.De
int.TryParse()-methode retourneerttrueals deze de variabelestringmet succes heeft geconverteerd naar eenvalue; anders retourneert dezeint. Plaats daarom de instructie in eenif-instructie en voer de beslissingslogica dienovereenkomstig uit.De geconverteerde waarde wordt opgeslagen in de
intvariabeleresult. Deint-variabeleresultwordt gedeclareerd en geïnitialiseerd vóór deze coderegel, dus zou deze beschikbaar moeten zijn zowel binnen de codeblokken die behoren tot deif- enelse-instructies als daarbuiten.Met
outhet trefwoord wordt de compiler geïnstrueerd dat deTryParse()methode niet alleen een waarde retourneert (als retourwaarde), maar ook een uitvoer communiceert via deze tweerichtingsparameter.Wanneer u de code uitvoert, ziet u de volgende uitvoer:
Measurement: 102
De geparseerde int code later gebruiken
Als u wilt laten zien dat de
resultvariabele die eerder is gedeclareerd, wordt gevuld door deoutparameter en later ook bruikbaar is in uw code, werkt u uw code als volgt bij in de Visual Studio Code-editor:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");Selecteer Opslaan in het menu Visual Studio Code File. Het Program.cs-bestand moet worden opgeslagen voordat u de code bouwt of uitvoert.
Klik in het deelvenster EXPLORER om een Terminal te openen op de locatie van de map TestProject met de rechtermuisknop op TestProject en selecteer Vervolgens Openen in geïntegreerde terminal. Er moet een terminalvenster worden geopend en moet een opdrachtprompt bevatten die laat zien dat de Terminal is geopend voor de locatie van de testproject-map.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
Notitie
Als er een bericht wordt weergegeven met de tekst 'Kan een project niet vinden om uit te voeren', controleert u of in de Terminal-opdrachtprompt de verwachte locatie van de testprojectmap wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop\csharpprojects\TestProject>U moet de volgende uitvoer zien:
Measurement: 102 Measurement (w/ offset): 152Bekijk de laatste coderegel in het vorige voorbeeld,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");omdat de variabele buiten deresultif-instructie is gedefinieerd, kan deze later in uw code worden geopend.
Wijzig de tekenreeksvariabele in een waarde die niet kan worden geparseerd
Kijk ten slotte naar het andere scenario, waarbij het TryParse() opzettelijk een slechte waarde krijgt die niet kan worden geconverteerd naar een int.
Wijzig de eerste regel code en initialiseer de variabele
valueopnieuw in een andere waarde.string value = "bad";Wijzig ook de laatste coderegel om ervoor te zorgen dat het resultaat groter is dan 0 voordat het tweede bericht wordt weer gegeven.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Het volledige codevoorbeeld moet nu overeenkomen met de volgende code:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren. U krijgt het volgende resultaat:
Unable to report the measurement.Bekijk de laatste twee regels code die in het vorige voorbeeld zijn toegevoegd.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Omdat
resultbuiten deifinstructie is gedefinieerd, kunt uresultlater in uw code buiten de codeblokken benaderen. Eerst dient er gecontroleerd te worden ofresulteen waarde groter dan nul heeft, voordatresult+ offset als uitvoer kan worden geschreven. Als u controleert op eenresultwaarde die groter is dan nul, wordt voorkomen dat er na hetUnable to report the measurement.bericht een offsetwaarde wordt afgedrukt.
Samenvatting
De methode TryParse() is een waardevol stuk gereedschap. Hier volgen een paar snelle ideeën om te onthouden.
- Gebruik
TryParse()bij het converteren van een tekenreeks naar een numeriek gegevenstype. -
TryParse()retourneerttrueals de conversie is geslaagd,falseals deze mislukt. - Out-parameters bieden een secundaire methode die een waarde retourneert. In dit geval retourneert de
outparameter de geconverteerde waarde. - Gebruik het trefwoord
outbij het doorgeven van een argument aan een methode die eenoutparameter heeft gedefinieerd.
Kennis testen
Feedback
Is deze pagina nuttig?
No
Hulp nodig bij dit onderwerp?
Wilt u Ask Learn gebruiken om iets te verduidelijken of u door dit onderwerp te leiden?