Beim Parsen von Benutzereingaben wird generell empfohlen , keine Ausnahmen auszulösen und abzufangen, sondern Validierungsmethoden zu verwenden. In der .NET-BCL ist dies beispielsweise der Unterschied zwischen int.Parse
(löst eine Ausnahme für ungültige Daten aus) und int.TryParse
(Rückgabe false
für ungültige Daten).
Ich entwerfe meine eigenen
Foo.TryParse(string s, out Foo result)
Methode und ich bin mir nicht sicher über den Rückgabewert. Ich könnte bool
wie .NETs eigene TryParse
Methode verwenden, aber das würde keinen Hinweis auf die Art des Fehlers geben, auf den genauen Grund, warum s
nicht in a analysiert werden konnte Foo
. (Zum Beispiel s
könnte Bar
eine nicht übereinstimmende Klammer oder die falsche Anzahl von Zeichen oder eine ohne entsprechende Baz
usw. vorhanden sein.)
Als Benutzer von APIs mag ich Methoden nicht, die nur einen Booleschen Wert für Erfolg / Misserfolg zurückgeben, ohne mir zu sagen, warum der Vorgang fehlgeschlagen ist. Dies macht das Debuggen zu einem Ratespiel, und das möchte ich auch den Clients meiner Bibliothek nicht aufzwingen.
Ich kann mir viele Problemumgehungen für dieses Problem vorstellen (Statuscodes zurückgeben, eine Fehlerzeichenfolge zurückgeben, eine Fehlerzeichenfolge als out-Parameter hinzufügen), aber alle haben ihre jeweiligen Nachteile, und ich möchte auch mit den Konventionen von konsistent bleiben das .NET Framework .
Meine Frage lautet also wie folgt:
Gibt es in .NET Framework Methoden, die (a) Eingaben analysieren, ohne Ausnahmen auszulösen, und (b) immer noch detailliertere Fehlerinformationen zurückgeben als ein einfacher wahr / falsch-Boolescher Wert?
Parse()
.