C# 如何管理特定和一般异常

C# 如何管理特定和一般异常,c#,.net,exception,exception-handling,C#,.net,Exception,Exception Handling,如果这里的OracleException不是我想要的,会发生什么?我需要扔吗?这里还有一个常见的异常,这是正确的做法吗 try { does some code } catch (OracleException ex) { if (ex.Number == 20001) { throw new ValidationException("Unable blah blah blah"); } throw; } catch (Exception

如果这里的OracleException不是我想要的,会发生什么?我需要扔吗?这里还有一个常见的异常,这是正确的做法吗

try
{
    does some code
}
catch (OracleException ex)
{
    if (ex.Number == 20001)
    {
        throw new ValidationException("Unable blah blah blah");
    }
    throw;
}
catch (Exception ex)
{
    // Log it
    TraceHelper.WriteLine("Exception updating tblah + Environment.NewLine + ex.StackTrace, MessageCategory.Error);
    throw;
}

一件真正好的事情是意识到代码中有bug。你是怎么做到的?通常崩溃或放置全局异常处理程序,该处理程序捕获异常并以某种方式通知开发人员

捕获泛型异常而不抛出它与前面的语句背道而驰,因此建议不要这样做

快速失败通常被认为是一种良好的做法()


最后,但不是租赁,您通常不希望捕获不知道如何从中恢复的异常。如果你有一个bug和一个异常,你会在你的应用程序中做什么?您的代码无法从这种情况中恢复,您必须失败,通知de user和开发人员并结束应用程序。

真正好的做法是意识到代码中有错误。你是怎么做到的?通常崩溃或放置全局异常处理程序,该处理程序捕获异常并以某种方式通知开发人员

捕获泛型异常而不抛出它与前面的语句背道而驰,因此建议不要这样做

快速失败通常被认为是一种良好的做法()


最后,但不是租赁,您通常不希望捕获不知道如何从中恢复的异常。如果你有一个bug和一个异常,你会在你的应用程序中做什么?您的代码无法从这种情况中恢复,您必须失败,通知de user和开发人员并结束应用程序。

这看起来您只想根据异常的某些情况捕获
OracleException
。好消息是,使用C#6.0可以添加
when
子句来添加该条件:

catch (OracleException ex) when (ex.Number == 20001) 
{ 
    throw new ValidationException("Unable blah blah blah");
}
这意味着如果
ex.Number
不是20001,抛出的异常将检查您拥有的下一个catch子句,在这种情况下,它将属于您的泛型catch


泛型catch是否应该存在是有争议的,根据经验法则,您不应该有泛型异常处理。如果您不知道代码抛出异常的原因,如何才能成功地处理它?

这看起来您只希望根据异常的某些条件捕获
OracleException
。好消息是,使用C#6.0可以添加
when
子句来添加该条件:

catch (OracleException ex) when (ex.Number == 20001) 
{ 
    throw new ValidationException("Unable blah blah blah");
}
这意味着如果
ex.Number
不是20001,抛出的异常将检查您拥有的下一个catch子句,在这种情况下,它将属于您的泛型catch


泛型catch是否应该存在是有争议的,根据经验法则,您不应该有泛型异常处理。如果您不知道代码抛出异常的原因,那么如何才能成功地处理它?

Nice,那么如果它不是20001类型,会发生什么呢?我想这就是我不知道该怎么处理的。我运行的6.0看起来不一样,短期内也无法更新。这种情况下,我所掌握的信息准确吗?我的api中有一个全局异常处理程序,它将拾取并向前端显示正确的错误处理。如果您不知道代码抛出异常的原因,您如何期望成功地处理它+这是我的荣幸!很好,如果它不是20001型会发生什么?我想这就是我不知道该怎么处理的。我运行的6.0看起来不一样,短期内也无法更新。这种情况下,我所掌握的信息准确吗?我的api中有一个全局异常处理程序,它将拾取并向前端显示正确的错误处理。如果您不知道代码抛出异常的原因,您如何期望成功地处理它+这是我的荣幸!