問題:在using語句中聲明using語句的目標對象是否有優勢,如下面的'代碼段1'中所示?聲明在C語句之外使用語句的目標對象#
「代碼段2」和「代碼段3」代碼段對我來說似乎也是有效的,但不確定第一個代碼段是否比其他兩個代碼段有一些優勢。
代碼段1
using (TextWriter w = File.CreateText("log.txt")) {
w.WriteLine("This is line one");
w.WriteLine("This is line two");
}
代碼段2
TextWrite w = null;
using (w = File.CreateText("log.txt")) {
w.WriteLine("This is line one");
w.WriteLine("This is line two");
}
代碼段3
TextWriter w = File.CreateText("log.txt");
using (w) {
w.WriteLine("This is line one");
w.WriteLine("This is line two");
}
UPDATE 1:當TextWriter對象被實例化時,看起來'代碼片段3'可能以第一行出現異常時資源沒有被處置。因此,前兩個片段看起來與處理資源相當,而第三個片段絕對不可取,除非第三個片段具有TextWriter對象處理的finally塊。
更新2:從彼得得到答案後,我意識到我在UPDATE 1中的觀察是不正確的。解釋如下:如果在3個片段中的任何一箇中實例化TextWriter時發生異常,則Dispose方法將永遠不會被調用,因爲沒有TextWriter對象調用此方法。
這取決於你是否想在'using'塊的範圍之外訪問'w'。 –
主要的一點是,當你嘗試訪問w時,編譯器會告訴你,這很好看,因爲它已經被處理掉了。 –