Ознайомившись із більшістю відповідей тут, я хотів би додати пару думок.
Покладатися на коментарі до документації XML і сподіватися, що інші покладаються - поганий вибір. Більшість кодів C #, з якими я стикався, не документують методи повністю та узгоджено з коментарями до документації XML. І тоді є ще більша проблема, яка полягає у тому, що без перевірених винятків у C #, як ви можете задокументувати всі винятки, які створює ваш метод для того, щоб користувач вашого API знав, як обробляти їх усі окремо? Пам'ятайте, ви знаєте лише про тих, кого кидаєте за допомогою ключового слова throw у своїй реалізації. API, які ви використовуєте всередині вашої реалізації методу, можуть також видавати винятки, про які ви не знаєте, оскільки вони можуть не бути задокументованими, і ви не обробляєте їх у своїй реалізації, тому вони підірвуться перед абонентом вашого метод. Іншими словами,
Андреас пов’язав інтерв’ю з Андерсом Хейлсбергом у відповідях тут, чому команда дизайнерів C # вирішила не перевіряти винятки. Остаточна відповідь на вихідне запитання прихована в цьому інтерв’ю:
Програмісти захищають свій код, пишучи спробувати "нарешті" скрізь, тому вони відступлять правильно, якщо трапиться виняток, але насправді вони не зацікавлені в обробці винятків.
Іншими словами, нікого не повинно цікавити, який виняток можна очікувати для певного API, оскільки ви завжди збираєтеся вловити їх усі скрізь. І якщо ви хочете по-справжньому піклуватися про певні винятки, як їх обробляти, вирішувати вам, а не тому, хто визначає підпис методу чимось на кшталт Java кидає ключове слово, змушуючи конкретну обробку винятків для користувача API.
-
Особисто я тут розірваний. Я згоден з Андерсом, що перевірка винятків не вирішує проблему без додавання нових, інших проблем. Як і в коментарях до документації XML, я рідко бачу код C # з усім, що загорнуто в блоки блоку try. Мені здається, що це справді ваш єдиний варіант і щось, що здається гарною практикою.