多个 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 关键字不能用于上面的示例中。将发生编译错误。当声明的变量具有来自不同层次结构的类型时,即使逗号分隔的声明也不起作用。