При анализе пользовательского ввода обычно рекомендуется не генерировать и перехватывать исключения, а использовать методы проверки. В .NET BCL это будет разница между, например, int.Parse
(создает исключение для недопустимых данных) и int.TryParse
(возвращает false
недопустимые данные).
Я создаю свой собственный
Foo.TryParse(string s, out Foo result)
метод, и я не уверен насчет возвращаемого значения. Я мог бы использовать bool
как собственный TryParse
метод .NET , но это не дало бы указание на тип ошибки, на точную причину, почему s
не может быть проанализирован в Foo
. (Например, s
может иметь несоответствующие скобки, или неправильное количество символов, или Bar
без соответствующего Baz
и т. Д.)
Как пользователь API, я сильно не люблю методы, которые просто возвращают логическое значение успеха / неудачи, не сообщая мне, почему операция не удалась. Это делает отладку игрой в догадки, и я не хочу навязывать это клиентам моей библиотеки.
Я могу придумать много обходных путей для этой проблемы (вернуть коды состояния, вернуть строку ошибки, добавить строку ошибки в качестве параметра out), но у них у всех есть свои недостатки, и я также хочу оставаться в соответствии с соглашениями .NET Framework .
Таким образом, мой вопрос заключается в следующем:
Существуют ли в .NET Framework методы, которые (а) анализируют ввод без выдачи исключений и (б) все же возвращают более подробную информацию об ошибках, чем простое логическое значение true / false?
Parse()
.