gpt4 book ai didi

c# - 异常处理中的异常处理

转载 作者:行者123 更新时间:2023-11-30 15:21:54 25 4
gpt4 key购买 nike

异常处理中异常处理的最佳实践是什么?

我发现自己在现有的 C#(Framework 4.0)系统上工作,该系统在 catch 中使用自定义对象,并最终阻塞整个系统的大部分应用服务器层。

考虑此代码库中方法的以下片段版本:

    public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);

if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
finally
{
oDBConn.DeleteLocksByGUID(sGUID);
}
}

我可能过于偏执了,但我发现自己非常担心这些可能发生的未处理异常。

因此,像以下更新版本这样的做法是否可以接受,或者是否有更好的方法来完成同样的事情?

    public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);

try
{
if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
catch (Exception oEEx)
{
oExceptions.Add(oEEx);
}
}
finally
{
try
{
oDBConn.DeleteLocksByGUID(sGUID);
}
catch (Exception oFEx)
{
oExceptions.Add(oFEx);
}
}
}

最佳答案

我个人不会在finally里面加一个try catch block ,那它就可以是一个无穷无尽的链条了。通常你不应该在 finally 中有复杂的东西,并且在任何情况下都应该在调用者中捕获意外异常。

编辑:仔细观察代码,我不明白为什么 finally 中的代码不应该在 try block 中。

关于c# - 异常处理中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com