C#向顶级函数抛出异常,然后记录它们
我有以下异常处理代码:C#向顶级函数抛出异常,然后记录它们,c#,.net,C#,.net,我有以下异常处理代码: private void foo (){ try{ foo1(); } catch(Exception ex){ if (ex is specificException){ //Catch only the exceptions that I can really handle // log the exception // Display a message to the user that so
private void foo (){
try{
foo1();
}
catch(Exception ex){
if (ex is specificException){ //Catch only the exceptions that I can really handle
// log the exception
// Display a message to the user that something went wrong.
return;
}
throw;
}
}
private void foo1(){
try{
// code that could throw an exception
}
catch{
throw;
}
}
因此,问题是:
我应该继续使用这种方法来处理异常,还是应该将所有异常记录在低级函数中,然后抛出它们
附言
我捕获所有未处理的异常,然后优雅地关闭应用程序。一般来说,除非要捕获特定类型的异常,否则应避免使用try/catch try/catch的错误用法示例 好用好用好用
那么,如果我们没有到处都有try/catch,那么我们如何处理异常呢?答案是使用自动测井仪为您完成。这是一个很好的例子,您安装了Nuget软件包和wallah,所有异常都会自动记录,您可以查看它们。一般来说,除非您想捕获特定类型的异常,否则应该避免使用try/catch try/catch的错误用法示例 好用好用好用
那么,如果我们没有到处都有try/catch,那么我们如何处理异常呢?答案是使用自动测井仪为您完成。这是一个很好的例子,您安装了Nuget软件包和wallah,所有异常都会自动记录,您可以查看它们。这是一个基于观点的问题。有些代码样式更喜欢捕捉尽可能靠近其源的异常,而另一些则更喜欢传播它们。通常,您会在stacktrace中获取所有异常。非常有用,特别是如果你在团队中工作一个大项目只是为了提醒一下,你可以有多个catch子句,这样就不需要使用
if(ex is specificeexception)
我试图找出在foo1
中捕获异常的意义,如果它将在调用语句中被再次抛出和捕获。看起来很可怕。通过这个链接,这是一个基于观点的问题。有些代码样式更喜欢捕捉尽可能靠近其源的异常,而另一些则更喜欢传播它们。通常,您会在stacktrace中获取所有异常。非常有用,特别是如果你在团队中工作一个大项目只是为了提醒一下,你可以有多个catch子句,这样就不需要使用if(ex is specificeexception)
我试图找出在foo1
中捕获异常的意义,如果它将在调用语句中被再次抛出和捕获。看起来很可怕。通过这个链接,它讨论除了ArgumentNullException是一个不应该被捕获但应该避免的异常。没错,这只是第一个想到的异常除了ArgumentNullException是一个不应该被捕获但应该避免的异常。没错,这只是第一个想到的异常
try {
//some work
}
catch(Exception e) {
//this is bad, it traps everything!
}
try {
//some work
}
catch(ArguementNullException e) {
//good, we only trapped the one exception we were interested in, everything is is thrown
}