Podczas analizowania danych wejściowych od użytkownika ogólnie zaleca się, aby nie zgłaszać wyjątków i wychwytywać wyjątki, ale raczej stosować metody sprawdzania poprawności. W .NET BCL byłaby to różnica między, na przykład int.Parse
(zgłasza wyjątek w przypadku nieprawidłowych danych) i int.TryParse
(zwraca false
w przypadku nieprawidłowych danych).
Projektuję własne
Foo.TryParse(string s, out Foo result)
i nie jestem pewien co do wartości zwracanej. Mógłbym użyć bool
własnej TryParse
metody .NET , ale nie dałoby to żadnego wskazania na temat rodzaju błędu, ani o dokładny powód, dla s
którego nie można go przeanalizować jako Foo
. (Na przykład s
może mieć niedopasowany nawias, niewłaściwą liczbę znaków lub znak „ Bar
bez” Baz
itp.)
Jako użytkownik interfejsów API zdecydowanie nie lubię metod, które zwracają tylko logiczne powodzenie / niepowodzenie, nie mówiąc mi, dlaczego operacja się nie powiodła. To sprawia, że debugowanie jest zgadywaniem i nie chcę narzucać tego również klientom mojej biblioteki.
Mogę wymyślić wiele obejść tego problemu (zwracaj kody stanu, zwracaj ciąg błędów, dodaj ciąg błędów jako parametr wyjściowy), ale wszystkie mają swoje wady, a także chcę pozostać zgodny z konwencjami .NET Framework .
Zatem moje pytanie jest następujące:
Czy w systemie .NET Framework istnieją metody, które (a) analizują dane wejściowe bez zgłaszania wyjątków i (b) nadal zwracają bardziej szczegółowe informacje o błędach niż zwykły logiczny prawda / fałsz?
Parse()
.