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

C#一系列调用中的错误处理,c#,error-handling,C#,Error Handling,对错误处理来说是全新的,但要努力理解 对于单个流程,我有以下几点: try { myGetDataFunction(); }catch(SqlException ex){ myLogExceptionRoutine(); }catch{ throw; } 我的下一步是看看我有多个连续调用的情况。 例如 如果callA失败,我不希望调用callB。 问题是,我是将A和B都包装在一个try/catch中,还是为每一个单独的try/catch? .. 有了这些,我正试图

对错误处理来说是全新的,但要努力理解

对于单个流程,我有以下几点:

try
{
     myGetDataFunction();
}catch(SqlException ex){
     myLogExceptionRoutine();
}catch{
     throw;
}
我的下一步是看看我有多个连续调用的情况。 例如

如果callA失败,我不希望调用callB。 问题是,我是将A和B都包装在一个try/catch中,还是为每一个单独的try/catch? .. 有了这些,我正试图理解这一切的“原因”

那么像这样

try{
    callA();
    callB();
}catch{
     // handling stuff
}
或者像这个奇怪的psuedo代码,看起来不“正确”

try{
   callA();
}catch{
   // handle error
}
if(somevalidityCheck){
    try{
       callB();
    }catch{
       // handle error
    }
}
首先,在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或callb中捕获异常、记录必要的详细信息然后抛出异常可能会很有用

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

首先,用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或callb中捕获异常、记录必要的详细信息然后抛出异常可能会很有用


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

try
块内发生异常时,将跳过
try
块的其余部分,以便您的代码

try
{
    callA();
    callB();
}
catch{}
如果
callA
引发异常,则不会执行
callB
。如果您需要以不同的方式处理异常,那么将其拆分为两个
try catch
块的唯一原因是,在这种情况下,您可以嵌套这些块以保持
callB
callA
抛出时被跳过的行为

try
{
    callA();
    try
    {
        callB();
    }
    catch 
    {
        Debug.Log("callB raised exception");
    }
}
catch
{
    Debug.Log("callA raised exception and callB was not executed");
}

try
块内发生异常时,将跳过
try
块的其余部分,以便您的代码

try
{
    callA();
    callB();
}
catch{}
如果
callA
引发异常,则不会执行
callB
。如果您需要以不同的方式处理异常,那么将其拆分为两个
try catch
块的唯一原因是,在这种情况下,您可以嵌套这些块以保持
callB
callA
抛出时被跳过的行为

try
{
    callA();
    try
    {
        callB();
    }
    catch 
    {
        Debug.Log("callB raised exception");
    }
}
catch
{
    Debug.Log("callA raised exception and callB was not executed");
}

您不需要
catch{throw:}
,只需在一次尝试中放入callA()和callB()。如果A失败,B将不会被调用。您不需要捕获{throw:}。只需在一次尝试中放入callA()和callB()。如果A失败了,B就不会被称为Hanks了。知道什么时候事情不只是起作用总是很好的,而且也是“正确”的方式。非常感谢。知道什么时候事情不只是起作用总是很好的,而且也是一种“正确”的方式。