可能重複:
Does Dispose method still get called when Exception is thrown inside of Using statment?即使在使用塊中引發異常,資源是否也被丟棄?
訪問數據庫時,我已經有了一些using
塊。我想知道 - 如果在使用塊中必須拋出異常,即使塊的末尾沒有到達,仍然會處理必要的資源嗎?或者我需要在catch
區塊手動關閉它們?
可能重複:
Does Dispose method still get called when Exception is thrown inside of Using statment?即使在使用塊中引發異常,資源是否也被丟棄?
訪問數據庫時,我已經有了一些using
塊。我想知道 - 如果在使用塊中必須拋出異常,即使塊的末尾沒有到達,仍然會處理必要的資源嗎?或者我需要在catch
區塊手動關閉它們?
用using
聲明定義的資源被處置,這是using
有利的主要原因。
using語句確保即使 發生異常,而你是調用對象的方法是調用Dispose 。你可以通過將對象放在一個try塊中並且然後在finally塊中調用Dispose來實現相同的結果;然後你可以通過 來獲得相同的結果。實際上,這是編譯器如何翻譯 使用語句。
http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx
是的,使用塊的資源將被設置。
你不會。其實using
塊是相同的,如果你使用try{}catch{}finally{}
結構與Dispose方法調用在finally塊。所以它會被稱爲無論如何。
是的,該元素將被丟棄,因爲該呼叫是try
的finally
塊的一部分,其中using
轉換成其中的finally
塊。
從C#規格的8.13:
using語句被翻譯成三個部分:獲取,使用 和處置。該資源的使用被隱式地包含在包含finally子句的語句try 中。這最後一條配置了資源的 。如果獲取空資源,則不會調用 Dispose,也不會拋出異常。
所以你不需要手動處理它,並且我不確定你自己的catch
塊在哪裏。
+1爲描述的鏈接和15秒。比我快。 ;-) – Fischermaen
謝謝!只是等待計時器接受回答:) –
,同時我得到-1 ... – Fischermaen