using語句不捕獲異常。捕捉異常,你有兩個選擇:捕捉異常。您是否替換或包裝使用語句
1)解開的使用和手動實現它:
void MyFunc()
{
StreamReader myReader = null;
try
{
myReader = new StreamReader(path);
//use myReader
}
catch (Exception e)
{
//do something with exception
}
finally
{
if (myReader != null)
myReader.Dispose();
}
}
或2)保留使用,並在另一個try catch塊包裝它
void MyFunc()
{
try
{
using (StreamReader myReader = new StreamReader(path))
{
//use myReader
}
}
catch (Exception e)
{
//do something with exception
}
}
對我來說,第二個看起來更整潔,特別是當你有多個使用語句時,因爲它更好地描述了流程,並刪除了顯式聲明,空檢查和Dispose()調用。
但是,由於額外的嘗試抓取開銷有效地多餘,感覺不對。
什麼是標準做法?
第二種方式是多餘的? – Tim
由於被投票而不太適合SO,但我更喜歡後者倒置(內部的try/catch)。它完全不會影響我,它可能會導致更多的IL,而不是自己手動執行'Dispose' - 這對我來說不是那麼容易,這是「使用」開始的地方。 – 2011-11-18 09:29:55
@Tim:我想我以爲IL已經設置了兩個異常處理點。一個用於外部嘗試,另一個用於隱式嘗試。 – GazTheDestroyer