Прежде всего, если ваше описание точное, это не совсем так, как работает int.TryParse и его братья и сестры.
Я признаю, что эти методы слегка нарушены, на мой взгляд, поскольку они нене передать причину сбоя синтаксического анализа вызывающей стороне, только в том, что она не удалась.В этом отношении я хотел бы видеть лучший способ справиться с этим.
На самом деле, лучший способ, опять же на мой взгляд, это то, что я видел в сторонней библиотеке, которую я не помню, но в основном у них были различные пользовательские типы, у которых была такая пара методов Parse / TryParse, и они делали следующее:
- Определите универсальную структуру, которая содержала бы и значение, полученное при разборе строкив качестве значения типа enum, передающего результат синтаксического анализа
- Все методы TryParse возвращали эту структуру и не имели
out
параметра - Методы Parse просто вызывали методы TryParse, а затемперевел различные неуспешные результаты этого перечисления в соответствующие исключения
Опять же, главная проблема здесь, на мой взгляд, заключалась в том, что он не был расширяемым.Если бы я хотел использовать их систему, типы и добавить собственную причину, я бы не смог этого сделать, но некоторые варианты этого легко справились бы с этим.
В любом случае int.TryParseметоды не выдают никаких исключений.Вместо этого они выполняют действия по фактическому анализу строки, и если они сталкиваются с чем-то, с чем они не могут справиться, они просто возвращают false, вот и все, никаких исключений в игре.
Обработка исключений немного дороже, чемальтернатива без исключений, поэтому некоторые такие основные методы оптимизированы для производительности.
Вот почему в моем комментарии я назвал ваш шаблон, если он точный, глупым, потому что вы объединили обработку исключений с параметрами out.И что вы можете сделать с этим исключением, как только вы его восстановите?брось это?Тогда вы вернетесь на круги своя.
Я бы серьезно посмотрел на ваш паттерн и попытался бы его изменить.
Конечно, все это зависит от предположения, что ваше описание еготочный.