2010-08-11 63 views
5

HI, 我想知道你的心思都放在異常處理是什麼,即我有一個方法:在循環內部何處捕捉異常?

public void Method{} 
{ 
    for (int i=0;i < length) 
    { 
    // dosomething that may case exception 
    ... 
    ... 
    // rest of the code 
    } 
} 

我應該加入try catch塊的異常處理整個循環或只是代碼是最可調或其他東西? 最佳做法是什麼?

+0

請參閱http://stackoverflow.com/questions/22623/net-throwing-exceptions-best-practices,雖然它不是一個確切的副本。 – ChrisF 2010-08-11 17:24:22

回答

0

我的首選是儘可能地將異常處理保持在儘可能拋出異常的代碼附近。這給你最好的堆棧跟蹤。我會把它放在循環中。因人而異

+3

通常情況下,異常發生的地方_isn't_你的程序準備好處理它。 – 2010-08-11 17:27:48

0

依賴的你在做什麼

如果您打算當一些異常升高,自然你把try catch塊成繼續迭代。

如果你想停止操作時發生一些錯誤更好的辦法就是放入try catch塊。

for (int i = 0; i < 10000000; i++) { 
     try { 

     }catch (Exception e) { 

     } 
    } 

期限16毫秒。

try { 
     for (int i = 0; i < 10000000; i++) { 

     } 
    }catch (Exception e) { 

    } 

持續時間0ms。

2

這取決於你希望你的代碼如何流動

例如應該循環繼續執行,即使一個元素拋出異常?如果是這樣,那麼你希望你的嘗試/抓住裏面的。如果沒有,那麼你想要你的嘗試/抓住周圍。

9

答案在於你想要/可以處理的級別。如果一個元素的處理可能失敗,但您可以繼續處理,那麼使用try catch內部循環。如果錯誤可能發生並且您無法繼續,那麼請使用外部嘗試抓取。

0

您可以識別爲有問題的線條越少越好。那麼你應該把它們放在try catch塊中。

1

這取決於。

如果您在任何單個元素上遇到異常,是否要繼續處理元素?然後處理循環內的異常。

如果遇到異常,您是否希望循環處理停止?然後處理循環外的異常。