В чем разница между:
catch
{
MessageBox.Show("Error.");
}
и
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
В чем разница между:
catch
{
MessageBox.Show("Error.");
}
и
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
Как и для .NET 2, если вы не настраиваете конфигурацию? Ничего.
До этого или с некоторыми настройками конфигурации я точно не помню, была возможность исключения из неуправляемого кода, который не преобразовывался в объект Exception
-compatible.
Обратите внимание, что между ними существует другая опция, в которой вы указываете тип, но не переменную:
catch (Exception)
{
...
}
Лично я был бы очень осторожен в том, чтобы поймать исключение, даже не запустив его. Это может потребоваться, если вы вызываете костяной API, но обычно его лучше избегать.
Как правило, сначала вы должны поймать определенные ошибки.
Но если вы поймаете общий Exception
, как вы, я бы сказал, используйте второй случай:
catch (Exception ex)
{
MessageBox.Show("Error.");
//we never use ex, so is it better to use catch without arguments?
}
это может помочь вам с debbuging, поскольку переменная содержит трассировку стека, сообщение об ошибке... и т.д. Который вы можете использовать для регистрации ошибки или что-то, что поможет вам предотвратить ее.
Будьте очень осторожны, используя этот подход:
MessageBox.Show("Error.");
Не отслеживать ваши ошибки где-нибудь (например, файл журнала) может вызвать по-настоящему большой беспорядок.
Я думаю, что они одинаковы. Но второй случай поднял предупреждение о компиляторе, потому что вы объявляете исключение, которое вы не использовали. Мне нравится первый, потому что вы явно говорите, что вы не используете исключение. Существует также третий
catch (Exception)
{
//do something
}
если вы хотите указать тип исключения, но не заботятся о самом исключении.
В вашем втором примере вы можете ссылаться на данные исключения, такие как трассировка стека, источник и т.д. Это также дает общее сообщение, которое иногда полезно. Он сообщает вам, почему вы получили исключение, которое важно при отладке.
Некоторое исключение не может быть catch(Exception)
уловлено.
Ниже excecption в mono on linux, должен улавливать без параметра.
В противном случае время выполнения игнорирует статус catch(Exception)
.
System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
Если вы столкнулись с такой проблемой, попробуйте удалить параметр оператора catch
, запишите контекстные vars, чтобы узнать причину ошибки.
P.S. Я не знаю, как в окнах программа работает в окнах в обычном режиме.