Почему исключение .NET не перехватывается блоком try/catch?
Я могу рассказать, что здесь .cs-file происходит ...
Visual Studio .net не работает, поскольку считает, что .net-framework исключение не обработано. Что c# значит необработанный? Ну, в exception-handling Visual Studio есть настройка exceptions в Инструменты ... Параметры c-sharp ... Отладка ... Общие ... «Включить exception-handling только мой код (только управляемый)». Если dot-net это отмечено и если исключение c#.net распространяется из вашего .net кода и во фрейм стека, связанный dotnet с вызовом метода, который .cs-file существует в сборке, которая c#.net является «НЕ ВАШИМ КОДОМ» (например, Antlr), это custom-exceptions считается «необработанным». По custom-exceptions этой причине я отключаю эту visual-c# функцию «Включить только dotnet мой код». Но, если вы спросите .cs-file меня, это отстой ... допустим, вы exception делаете это:
ExternalClassNotMyCode c = new ExternalClassNotMyCode();
try {
c.doSomething( () => { throw new Exception(); } );
}
catch ( Exception ex ) {}
doSomething вызывает dotnet там вашу анонимную функцию, и exceptions эта функция генерирует исключение visual-c# ...
Обратите внимание, что c# это «необработанное исключение» согласно c-sharp Visual Studio, если «Включить csharp только мой код» включен. Кроме csharp того, обратите внимание, что .cs-file он останавливается, как если visual-c# бы это была точка останова csharp в режиме отладки, но в не c-sharp отладочной или производственной .cs-file среде код полностью действителен exception и работает должным образом. Кроме exception того, если вы просто «продолжите» в visual-c# отладчике, приложение продолжит c# свою работу весело (это не .net-framework остановит поток). Это считается .net-framework «необработанным», потому c# что исключение распространяется visual-c# через фрейм стека, который c# НЕ находится в вашем коде c-sharp (то есть во внешней библиотеке). Если dot-net вы спросите меня, это паршивая. Измените c#.net это поведение по умолчанию exception-handling Microsoft. Это вполне допустимый dot-net случай использования исключений c-sharp для управления логикой программы. Иногда c# вы не можете изменить стороннюю .net библиотеку, чтобы она работала custom-exceptions по-другому, и это очень полезный csharp способ выполнения многих dot-net задач.
Возьмем, к примеру, MyBatis, вы dotnet можете использовать этот c-sharp метод, чтобы остановить обработку c# записей, которые собираются .cs-file вызовом SqlMapper.QueryWithRowDelegate.
c#
.net
exception
antlr
Почему исключение .NET не перехватывается блоком try/catch?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.