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了。知道什么时候事情不只是起作用总是很好的,而且也是“正确”的方式。非常感谢。知道什么时候事情不只是起作用总是很好的,而且也是一种“正确”的方式。