2011-11-29 95 views
1

我正在讀取的字符串中有一些文本。包含該字符串的對象提供了一種方法,用於提取字符串的內容然後引發異常(EndOfStreamException)當字符串爲空時。那時我想完成我的數據提取並繼續處理它。我不太確定如何做到這一點。這是我猜測的。C#使用流量控制的異常

while(/*some condition on the data*/) 
try 
{ 
    objWithString.ExtractData(); 
} 
catch (Exception e) 
{ 
    if(e is EndOfStreamException) 
     { 
      break; 
     } 
    else 
     throw e; 
} 
} 
+0

你可以'catch(EndOfStreamException e)'而不是使用if塊 – smartcaveman

+0

我知道,我沒有寫這段代碼,我從來沒有見過這樣的代碼,但它的工作原理。這是一個小項目。 – s5s

+0

請參閱,如果objWithString有其他方法。可能是他們中的一個可能會幫助你而不會拋出異常。如果它是一些普通的第三方庫,我肯定有這樣的功能 – Kamarey

回答

4

這將工作,但它會更好地捕捉特定的異常,而不是在運行時進行測試,即。

while (/*some condition on the data*/) 
try 
{ 
    objWithString.ExtractData(); 
} 
catch (EndOfStreamException) 
{ 
    break; 
} 

我不完全確定「break」是否會在catch子句中起作用。如果沒有,你可能不得不將這個提取到一個方法並使用「返回」。

通常使用流量控制的異常被認爲是糟糕的設計,因爲異常旨在用於「特殊」條件,並且到達流的末端是正常的和預期的,並非例外。當然,如果你無法控制流的實現,那麼你必須採用這種方法。

+3

投擲和捕捉異常也很昂貴,性能明智。這是通常不會在方法的典型用例中拋出異常的另一個很好的理由。 –