C # явно определяет, какие исключения выбрасываются - PullRequest
26 голосов
/ 03 ноября 2010

В Java вы явно определяете, какие исключения выдают, используя ключевое слово throws.Таким образом, любой, кто вызывает ваш метод, знает, что ловить.

Есть ли что-то в C #?Если нет, то как узнать, какие исключения нужно перехватить, или как сообщить другим, какие исключения перехватить?

Кроме того, если я определяю интерфейс, можно ли сказать, что methodX ()выбросить это исключение по ошибке "?

Ответы [ 6 ]

34 голосов
/ 03 ноября 2010

В C # нет ничего эквивалентного: Проблема с проверенными исключениями

Кроме документации, нет способа объявить интерфейс, чтобы сказать, что "methodX () должен вызвать это исключение при ошибке".

11 голосов
/ 03 ноября 2010

C # /. Net не проверял исключения, они оказались менее полезными в крупномасштабных системах, чем предполагалось на первый взгляд.Во многих проектах время на поддержание спецификаций проверочных исключений было намного больше, чем время отладки, сэкономленное их наличием.

Проверенные исключения кажутся хорошим идеалом, пока у вас нет методов, которые могут принимать делегаты или вызовы впередаваемый объект. Возьмем простой случай: метод Sort () в списке не может знать, какие исключения он выдаст, поскольку он не знает, какие исключения вызовет метод Compar () для сортируемых объектов.

Таким образом, спецификация для исключений, которые может генерировать метод, должна включать в себя информацию о том, как заполняются исключения из pass в объектах и ​​делегатах. Никто не знает, как это сделать!

Однако есть инструменты, которые вы проверяете, ловите ли вы все исключения - см. Охотник за исключениями от Red Gate.Лично я не вижу особой ценности в этом инструменте, однако, если вам нравятся отмеченные исключения, вы можете найти их полезными.

8 голосов
/ 03 ноября 2010

Эта функция недоступна в C #.Вы можете создать надлежащую документацию XML (3 слеша ///) и указать, какие исключения генерируются.

Это будет обнаружено механизмом IntelliSense и будет видно пользователям класса / метода до того, как онииспользуйте это.

3 голосов
/ 03 ноября 2010

C # не поддерживает это.(Не то чтобы я все равно знал).Что вы можете сделать, так это использовать XML-комментарии, чтобы при вызове методов эти данные показывались intellisense.

2 голосов
/ 03 ноября 2010

C # не поддерживает проверенные исключения.Разработчики языка считают проверенные исключения тем, как java использует их, как плохую идею.

Некоторые обходные пути

2 голосов
/ 03 ноября 2010

Насколько я знаю, в C # нет объявления throws, вы можете задокументировать ваш метод, указав, что он генерирует исключение, но не обрабатывает принудительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...