2010-04-09 29 views
0

我該怎麼做?試試看 - 最後在If語句中,如何繼續?

void x() 
    {.... 
     if (...) 
     {try 
      {} 
      catch (ComException com) 
       { throw com} 
      finally // in any case, executed fine! 
       {...instructions.......} 

     } 
     ... instructions...// not executed in case of exception because the finally can't embrace the following code too... but this block of code needs to be executed in any case too... 
     {} 


    } 
+0

你爲什麼要在catch塊中拋出異常? – 2010-04-09 21:21:33

+0

@Matthew Jones 我猜OP正在省略catch塊內的一些日誌代碼。否則是的,抓住並重新拋出是沒有意義的。 – 2010-04-09 21:33:34

+0

,因爲我必須捕捉一個特殊的異常,Com一個,然後把它扔到調用方法,也許語法可以減輕...(IM在C#)...但沒有沒有其他代碼在趕上但拋出....否則你會怎麼寫它? – KitAndKat 2010-04-09 21:34:00

回答

1

將「else」分支中的代碼移至單獨的方法。然後從「else」和「finally」中調用該方法。

+0

這是唯一要做的事情。但現在我瞭解到,當你需要做的事情真的很牽強時,這可能是由於你的代碼的功能和概念模型的一些弱點......所以對我感到羞恥! – KitAndKat 2010-04-13 22:26:32

3

這是不正確的邏輯。如果代碼進入if語句,else塊將不會被執行。

如果您確實需要在異常情況下執行它,請將else塊中的代碼複製到finally塊中。

編輯:所以我覺得你想要的是這樣的:

try 
{ 
    if() 
    { 
      try 
      { 
       //Code 
      } 
      catch(ComException e) 
      { 
       throw e; 
      } 
    } 
} 
finally 
{ 
    /*....instructions.....*/ 
} 

這背後的原因是,如果IF語句是真內嘗試將執行代碼,將趕上並重新拋出ComException如果遇到它。無論IF語句還是捕獲ComException,finally塊中的代碼都會執行。

這是否更好地解釋位置?

道歉dtb;他首先回答了這個問題,我只是補充了一個解釋。

+0

是的,我完全對不起,其他錯了,我編輯了我的代碼,還有其他人,我很抱歉... – KitAndKat 2010-04-09 21:20:36

0

如果需要執行某些操作,它必須放在finally塊中。最後總是執行,不管try和catch塊發生了什麼。 「else」的上下文確實在try/catch/finally段之外。

2

你在找嗎?

try 
{ 
    if (...) 
    { 
     try 
     { 
      ... 
     } 
     catch (ComException) 
     { 
      ... 
     } 
    } 
} 
finally 
{ 
    ... 
} 

無論條件是否成立,都會執行finally塊。

+0

在這個解決方案中的問題是我不能針對具體的指令與我的嘗試,但我不得不擁抱大量的指令,而我想要一個特定的指令被捕獲的調用方法... – KitAndKat 2010-04-09 21:29:03

+0

@ user313176:答案更新。那這個呢? – dtb 2010-04-09 21:31:48