Cvičení – prozkoumání metody TryParse()
- 12 min
Při práci s daty je někdy potřeba převést řetězcová data na číselný datový typ. Jak jste se dozvěděli v předchozí lekci, protože datový typ řetězce může obsahovat nečíselná hodnota, je možné, že provedení převodu z datového string typu na číselný datový typ způsobí chybu za běhu.
Například následující kód:
string name = "Bob";
Console.WriteLine(int.Parse(name));
Způsobí následující výjimku:
System.FormatException: 'Input string was not in a correct format.'
Pokud se chcete vyhnout výjimce formátu, použijte metodu TryParse() pro cílový datový typ.
Použití TryParse()
Metoda TryParse() provede několik věcí současně:
- Pokusí se parsovat řetězec na zadaný číselný datový typ.
- V případě úspěchu uloží převedenou hodnotu do výstupního parametru, který je vysvětlen v následující části.
- Vrátí hodnotu
booloznačující, jestli akce byla úspěšná nebo neúspěšná.
Logickou návratovou hodnotu můžete použít k provedení akce s hodnotou (například provedení nějakého výpočtu) nebo můžete zobrazit zprávu, pokud byla operace analýzy neúspěšná.
Poznámka:
V tomto cvičení použijete int datový typ, ale u všech číselných datových typů je k dispozici podobná TryParse() metoda.
Výstupní parametry
Metody můžou vrátit hodnotu nebo vrátit hodnotu "void", což znamená, že nevracejí žádnou hodnotu. Metody mohou také vracet hodnoty prostřednictvím out parametrů, které jsou definovány stejně jako vstupní parametr, ale zahrnují out klíčové slovo.
TryParse() řetězec do int
Odstraňte nebo použijte operátor
//komentáře řádku k zakomentování veškerého kódu z předchozích cvičení.Následujícím způsobem aktualizujte kód v editoru visual Studio Code:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Prozkoumejte tento řádek kódu:
if (int.TryParse(value, out result))Při volání metody s parametrem
outje nutné použít klíčové slovooutpřed proměnnou, která obsahuje hodnotu. Parametroutje přiřazen proměnnéresultv kódu(int.TryParse(value,out result). Pak můžete použít hodnotu, kterououtparametr obsahuje ve zbytku kódu pomocí proměnnéresult.Metoda
int.TryParse()vrátítrue, pokud úspěšně převeďtestringproměnnouvaluena ;intv opačném případě vrátífalse. Proto tento příkaz zahrňte do příkazuifa pak proveďte příslušnou rozhodovací logiku.Převedená hodnota je uložena
intv proměnnéresult. Proměnnáintresultje deklarována a inicializována před tímto řádkem kódu, takže by měla být přístupná jak uvnitř bloků kódu, které patří do příkazůifelse, tak i mimo ně.Klíčové
outslovo dává kompilátoru pokyn, žeTryParse()metoda nevrací tradiční hodnotu pouze (jako návratová hodnota), ale také komunikuje výstup prostřednictvím tohoto obousměrného parametru.Když tento kód spustíte, měl by se zobrazit následující výstup:
Measurement: 102
Použití parsovaného int později v kódu
Aby bylo možné předvést, že
resultproměnná deklarovaná dříve, je naplněna parametremouta je také použitelná později v kódu, aktualizujte kód v editoru editoru visual Studio Code následujícím způsobem: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}");V nabídce Soubor editoru Visual Studio Code vyberte Uložit. Soubor Program.cs musí být uložen před sestavením nebo spuštěním kódu.
Na panelu PRŮZKUMNÍK otevřete terminál v umístění složky TestProject, klikněte pravým tlačítkem myši na TestProject a pak vyberte Otevřít v integrovaném terminálu. Měl by se otevřít panel terminálu a měl by obsahovat příkazový řádek zobrazující, že terminál je otevřený v umístění složky TestProject.
Na příkazovém řádku terminálu spusťte kód zadáním příkazu dotnet run a stiskněte Enter.
Poznámka:
Pokud se zobrazí zpráva "Nepodařilo se najít projekt ke spuštění", ujistěte se, že příkazový řádek terminálu zobrazí očekávané umístění složky TestProject. Příklad:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Měl by se zobrazit následující výstup:
Measurement: 102 Measurement (w/ offset): 152Prozkoumejte poslední řádek kódu v předchozí ukázce,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");protožeresultproměnná je definována mimo příkaz if, může být přístupná později v kódu.
Upravte proměnnou řetězce na hodnotu, kterou nelze analyzovat.
Nakonec se podívejte na jiný scénář , kde TryParse() je úmyslně dána chybná hodnota, kterou nelze převést na int.
Upravte první řádek kódu a znovu inicializujte proměnnou
valuena jinou hodnotu.string value = "bad";Dále upravte poslední řádek kódu, abyste zajistili, že před zobrazením druhé zprávy bude výsledek větší než 0.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Celý příklad kódu by se teď měl shodovat s následujícím kódem:
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}");Uložte soubor kódu a pak pomocí editoru Visual Studio Code spusťte svůj kód. Měli byste získat následující výsledek:
Unable to report the measurement.Prozkoumejte poslední dva řádky kódu přidaného v předchozí ukázce.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Vzhledem k tomu
result, že je definován mimoifpříkaz,resultmůžete k němu získat přístup později v kódu mimo bloky kódu.resultPotom můžete zkontrolovat hodnotu větší než nula, než povolíteresultzápis + posun jako výstup.resultKontrola hodnoty větší než nula zabrání tisku hodnoty posunu za zprávouUnable to report the measurement..
Rekapitulace
Metoda TryParse() je cenným nástrojem. Co byste si měli zapamatovat:
- Při převodu řetězce na číselný datový typ použijte
TryParse(). -
TryParse()vrátítrue, pokud je převod úspěšný,falsepokud je neúspěšný. - Parametry typu `out` poskytují sekundární způsob, jak může metoda vrátit hodnotu. V tomto případě
outvrátí parametr převedenou hodnotu. - Klíčové slovo
outpoužijte při předávání argumentu metodě, která definovalaoutparametr.