Jaka jest różnica między Parse () i TryParse ()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Czy istnieje jakaś forma sprawdzania błędów, taka jak blok Try-Catch?
Parse
zgłasza wyjątek, jeśli nie może przeanalizować wartości, natomiast TryParse
zwraca bool
wskazanie, czy się powiodło.
TryParse
nie tylko try
/ catch
wewnętrznie - chodzi o to, że jest wdrażany bez wyjątków, aby był szybki. W rzeczywistości najprawdopodobniej zaimplementowano ją w ten sposób, że wewnętrznie Parse
metoda wywoła, TryParse
a następnie zgłosi wyjątek, jeśli zwróci false
.
W skrócie, użyj, Parse
jeśli masz pewność, że wartość będzie prawidłowa; inaczej użyj TryParse
.
Jeśli łańcucha nie można przekonwertować na liczbę całkowitą, to
int.Parse()
zgłosi wyjątekint.TryParse()
zwróci false (ale nie zgłosi wyjątku)źródło
Metoda TryParse umożliwia sprawdzenie, czy coś jest możliwe do przeanalizowania. Jeśli spróbujesz Parse, tak jak w pierwszej instancji, z nieprawidłową wartością int, otrzymasz wyjątek, podczas gdy w TryParse zwraca wartość logiczną, informującą, czy analiza powiodła się, czy nie.
Jako przypis, przekazanie wartości null do większości metod TryParse spowoduje zgłoszenie wyjątku.
źródło
TryParse i podatek od wyjątków
Parse zgłasza wyjątek, jeśli konwersja z ciągu na określony typ danych nie powiedzie się, podczas gdy TryParse jawnie unika zgłaszania wyjątku.
źródło
TryParse nie zwraca wartości, zwraca kod stanu wskazujący, czy analiza powiodła się (i nie zgłasza wyjątku).
źródło
Dla przypomnienia, testuję dwa kody: po prostu próbuję przekonwertować ciąg znaków na liczbę, a jeśli to się nie powiedzie, przypisuję liczbę do zera.
i:
W przypadku języka C # najlepszą opcją jest użycie tryparse, ponieważ metoda try & Catch alternatywa zgłosiła wyjątek
Że jest to bolesne, powolne i niepożądane, jednak kod nie zatrzymuje się, chyba że wyjątek Debug jest ustawiony na zatrzymanie.
źródło
Wiem, że to bardzo stary post, ale pomyślałem o udostępnieniu kilku dodatkowych szczegółów na temat Parse vs TryParse.
Miałem scenariusz, w którym DateTime należy przekonwertować na String i jeśli datevalue null lub string.empty napotkaliśmy wyjątek. Aby temu zaradzić, zastąpiliśmy Parse TryParse i otrzymamy domyślną datę.
Stary kod:
Nowy kod:
Muszę zadeklarować inną zmienną i użyć jako Out dla TryParse.
źródło
startDate
iendDate
jakDateTime.TryParse
zawsze nadpisać jeDateTime.MinValue
. Jeśli niepoprawne reprezentacje dat powinny zostać przekonwertowane na inną wartość, sprawdź zwracaną wartość,DateTime.TryParse
a jeśli jest fałszywa, ustaw ją jawnie.DateTime?
( DateTime nullable )double.Parse ("-"); zgłasza wyjątek, podczas gdy double.TryParse ("-", out parsed); analizuje do 0, więc myślę, że TryParse wykonuje bardziej złożone konwersje.
źródło
TryParse
wracatrue
czyfalse
? W ten sposób dowiesz się, czy był „ważny”.