多個 using 語句和一個塊

可以使用多個巢狀的 using 語句,而無需新增多級巢狀大括號。例如:

using (var input = File.OpenRead("input.txt"))
{
    using (var output = File.OpenWrite("output.txt"))
    {
        input.CopyTo(output);
    } // output is disposed here
} // input is disposed here

另一種方法是寫:

using (var input = File.OpenRead("input.txt"))
using (var output = File.OpenWrite("output.txt"))
{
    input.CopyTo(output);
} // output and then input are disposed here

這與第一個例子完全相同。

注意: 巢狀的 using 語句可能會觸發 Microsoft Code Analysis 規則 CS2002 (請參閱此答案以獲得說明)並生成警告。如連結答案中所述,巢狀 using 語句通常是安全的。

using 語句中的型別屬於同一型別時,你可以用逗號分隔它們並僅指定型別一次(儘管這種情況並不常見):

using (FileStream file = File.Open("MyFile.txt"), file2 = File.Open("MyFile2.txt"))
{
}

當型別具有共享層次結構時,也可以使用此選項:

using (Stream file = File.Open("MyFile.txt"), data = new MemoryStream())
{
}

var 關鍵字不能用於上面的示例中。將發生編譯錯誤。當宣告的變數具有來自不同層次結構的型別時,即使逗號分隔的宣告也不起作用。