Перечислите все исключения, которые могут быть вызваны методом

Я знаю, что Java заставляет программиста перечислять все исключения, которые будут выброшены методом, и, таким образом, создает простой способ перечисления всех возможных выброшенных исключений для пользователя кода.

.NET, с другой стороны, не имеет такой функции, и все, что у нас осталось, — это документация API или документация XML, где иногда перечислены исключения.

Существуют ли какие-либо надстройки для VS, которые показывают, какие исключения может вызывать любой конкретный вызов? Учитывая силу отражения, не должно ли быть возможности просмотреть вызов и просмотреть все ветви возможных прогонов вызова и проверить наличие каких-либо исключений .NET?


person Kasper Holdum    schedule 06.04.2010    source источник
comment
И если вы обнаружите, что при анализе исходного кода он генерирует 3 разных исключения, как бы вы поместили в код предложения catch для каждого из них?   -  person shahkalpeshp    schedule 06.04.2010
comment
Разве теперь даже большинство инженеров Java не признают, что проверенные исключения были ужасной идеей?   -  person Matt Briggs    schedule 06.04.2010
comment
Я думаю, вам придется решить проблему остановки, чтобы определить каждый экземпляр, в котором может возникнуть исключение DivideByZeroException (в отличие от тех, где инварианты класса предотвращают его появление)   -  person Damien_The_Unbeliever    schedule 06.04.2010
comment
Мэтт, я не говорил конкретно о проверенных исключениях. Скорее способность видеть, какие исключения могут быть выброшены.   -  person Kasper Holdum    schedule 08.04.2010


Ответы (2)


Единственный известный мне инструмент — это (коммерческий) Охотник за исключениями от программного обеспечения Red-gate. .

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

В Java у вас есть «специальное» RuntimeException, которое не нужно объявлять в сигнатуре метода (включая все исключения, происходящие от него). Есть веские причины, по которым разработчики языка решили не реализовывать проверенные исключения в C# (спорно, перевешивают ли они преимущества или нет). Некоторые разработчики Java просто оборачивают исключения в исключения времени выполнения или забывают использовать исключения «причины», что приводит к потере информации.

Существует хорошее интервью с Андерсом Хейлсбергом о проверенных исключениях и некоторых рассуждениях относительно почему их нет в C#? Спасибо adrianbanks за ссылку.

person Lucero    schedule 06.04.2010
comment
Здесь есть хорошее интервью с Андерсом Хейлсбергом о проверенных исключениях и некоторых рассуждениях о том, почему в C# их нет: artima.com/intv/handcuffs.html - person adrianbanks; 06.04.2010
comment
@adrianbank, я знаю, но у меня просто не было под рукой ссылки. Спасибо за публикацию! - person Lucero; 06.04.2010
comment
Отличная статья, дает хорошее представление о проверенных исключениях для тех из нас, кто никогда не использовал их на практике. - person Kasper Holdum; 08.04.2010

Единственное, с чем я столкнулся, это Охотник за исключениями, но это коммерческий инструмент, который вам придется купить.

person adrianbanks    schedule 06.04.2010