尝试/捕获/最后,在最后使用Catch中的异常?

Jas*_*son 1 c# try-catch-finally

try catch finally在这里看了几个其他的问题,但我不确定这个问题是否得到了解答.做以下事情是不是很糟糕:

Exception? ex = null;
try { //something }
catch (Exception e) { ex = e ;}
finally {
    DoSomething();        
}
... //more code

//end of method
if (ex !=null) { throw ex; }
Run Code Online (Sandbox Code Playgroud)

基本上,我正在尝试确保运行某些代码(在try/catch/finally之外)并且如果发生异常则抛出异常,但直到所述代码运行之后才会抛出异常.我无法将所有代码放在finally块中,因为它超出了某些条件.

如果这样做,事实上,气味不好(我怀疑它确实如此),如何实现这一目标?

shf*_*301 6

这绝对是代码味道.在方法结束时重新抛出异常将覆盖异常的调用堆栈,因此看起来所有异常都发生在方法的末尾而不是它们真正发生的位置.

如果你不能将额外的代码放在现有的finally中,你可以创建嵌套的try..finally块:

try {
  try { //something }
  finally {
      DoSomething();        
  }
   ... //more code
}
finally {
  // cleanup code
}
Run Code Online (Sandbox Code Playgroud)

注意来自OP:请参阅此代码,了解此答案的作者让我正确推导出来的内容.