При анализе пользовательского ввода обычно рекомендуется не генерировать и перехватывать исключения, а использовать методы проверки. В .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().