Під час розбору вводу користувача, як правило, рекомендується не кидати та виловлювати винятки, а скоріше використовувати методи перевірки. У .NET BCL це буде різниця між, наприклад, int.Parse
(кидає виняток щодо недійсних даних) та int.TryParse
(поверненням false
недійсних даних).
Я проектую своє
Foo.TryParse(string s, out Foo result)
метод, і я не впевнений у поверненому значенні. Я міг би використовувати bool
такий власний TryParse
метод .NET , але це не дало б ніяких вказівок про тип помилки, про точну причину, через s
яку не можна було розібратися в Foo
. (Наприклад, s
можуть бути незрівнянні дужки, або неправильна кількість символів, або Bar
без відповідного Baz
тощо)
Як користувач API, я сильно не люблю методів, які просто повертають булевий успіх / провал, не розказуючи мені, чому операція не вдалася. Це робить налагодження гри вгадуванням, і я не хочу нав'язувати це клієнтам моєї бібліотеки.
Я можу придумати багато вирішень цієї проблеми (повернення кодів статусу, повернення рядка помилки, додавання рядка помилки як вихідний параметр), але всі вони мають свої відповідні мінуси, і я також хочу дотримуватися конвенцій .NET Framework .
Отже, моє запитання таке:
Чи є у .NET Framework методи, які (a) аналізують введення без викидів винятків та (b) все ще повертають більш детальну інформацію про помилку, ніж простий істинний / хибний булевий?
Parse()
.