一系列调用中的C#错误处理

时间:2016-04-08 11:50:37

标签: c# error-handling

对Err处理来说是全新的,但试图理解。

对于单个流程,我有这个:

try
{
     myGetDataFunction();
}catch(SqlException ex){
     myLogExceptionRoutine();
}catch{
     throw;
}

我的下一步是查看我有多个顺序调用的情况。 例如。

public void foo(){
    callA();
    callB();
}

如果callA失败,我不希望调用callB。 问题是,我是否只包括A& B在单个try / catch中,还是每个单独的try / catch? ..并且随之而来的是,我试图理解关于这一切的“原因”。

那么这样吗?

try{
    callA();
    callB();
}catch{
     // handling stuff
}

或者喜欢这个奇怪的伪代码,它看起来不正确?

try{
   callA();
}catch{
   // handle error
}
if(somevalidityCheck){
    try{
       callB();
    }catch{
       // handle error
    }
}

2 个答案:

答案 0 :(得分:1)

首先用C#标准括号在新行上用{}写它。 :)这里没有java !!

您的示例是一种完全可以接受的方式来编写您的异常,假设它能够做您想要的。

try
{
    callA();
    callB();
}
catch
{
     // Handle A or B exception. Do you need to know specific details about what A or B is doing?
}

如果您需要有关日志记录异常的更多详细信息,那么在CallA或B中捕获异常会很有用,记录必要的详细信息然后抛出异常。

如果每个人都在try / catch中包装每个方法,那么代码会变得非常混乱。

答案 1 :(得分:1)

try块中发生异常时,try块的其余部分将被跳过,因此您的代码

try
{
    callA();
    callB();
}
catch{}
如果callB引发异常,则

不会执行callA。将此分成两个try-catch块的唯一原因是,如果您需要以不同方式处理异常,那么您可以嵌套块以保持callB在{{1}时被跳过的行为投掷。

callA