using(...)語句是try {} finally {}的語法糖。使用語句和try-catch() - 最終重複?
但是,如果我再有一個using語句象下面這樣:
using (FileStream fs = File.Open(path))
{
}
現在我想趕上那打開此文件可能會導致異常(這是相當高的風險代碼,它可能因失敗環境),但如果我寫try-catch內部會不會重複?當代碼被編譯爲IL時,我假設代碼被打亂時重複會被刪除?但是,我想要捕捉異常打開文件可能會導致(所以我應該包裝在使用語句的範圍之外的try-catch),以及我在使用塊內部做的任何異常,所以我應該添加塊內的try-catch。
這看起來好像我爲CLR可能在裏面做了很多重複。 CLR是否添加catch子句?
我的同事爭辯說使用語句很混亂(但這是因爲一行代碼稍微長一點,因爲我編寫代碼很困難,因爲我需要快速更改代碼,並且無法訪問代碼的其他部分基礎)。所述同事不使用使用語句,但在使用語句和try-finally/try-catch-finally之間是否存在任何功能差異?我曾看到過這種情況,WCF服務有一個關於最終使用和返回值(最終有關)的不爲人知的案例。解決方案是使用一個校驗塊。在C#中有這樣的東西嗎?
在另一個說明中,是否實現了非託管資源的IDisposale所有者的所有類型?與朋友的討論指出了否定的答案。 (我也在這個論壇的使用部分閱讀了一些主題,那裏有一些非常好的知識)。
儘管最終使用支持嗎?你在哪裏發現了使用匿名範圍塊的使用方法?我想更多地瞭解這一點。所以當我在一個使用塊(例如FileSream.Open())中打開一個文件時,這個異常就會冒泡。如果using語句實現try/finally,那麼我必須在try/catch中包裝它才能獲得該catch。 – dotnetdev 2009-10-08 22:44:03