Как предотвратить возникновение исключений в C #? - PullRequest
1 голос
/ 27 апреля 2009

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

Однако, если в Visual Studio включены «Catch Throw Exceptions» (в отличие от «Catch User Unhandled Exceptions»), тогда исключение будет видимым для них.

Есть ли способ избежать этого?

Ответы [ 4 ]

7 голосов
/ 27 апреля 2009

Нет. Это сделано специально: я, как разработчик, запускаю с включенным Catch Thrown Exceptions, чтобы видеть исключения, генерируемые в коде библиотеки (и, надеюсь, избегать их). Ситуация, в которой вы находитесь, в равной степени относится и к собственным библиотекам .NET Framework.

Лучший способ - избежать исключения. Дополнительным преимуществом является то, что код вашей библиотеки будет работать быстрее, поскольку создание исключения оказывает заметное влияние на производительность (и должно использоваться только в «исключительных» случаях).

2 голосов
/ 27 апреля 2009

Единственный способ сделать это - добавить атрибут [DebuggerHidden] в метод, который может вызвать исключение. Как уже отмечали другие, лучше вообще избегать исключения, но этот атрибут будет выполнять то, что вы хотите.

0 голосов
/ 27 апреля 2009

Как Тим Робинсон предполагает, что нет способа контролировать кого-то, просматривающего исключения, выброшенные из вашей библиотеки. Его ответ хорош, поэтому я не буду перефразировать его.

В SO есть пара постов, которые могут оказаться полезными при обращении (как это звучит) с использованием исключений в качестве управления потоком программ:

Перехват исключений как ожидаемое управление потоком выполнения программы?
Почему программисты .Net так боятся исключений?

0 голосов
/ 27 апреля 2009

Вы не можете предотвратить это. Кто-то всегда может подключить к процессу отладчик и следить за происходящим.

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

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

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