C#使用关键字嵌套在单行中

bin*_*all 8 c# using-statement

通常我做的就是这样(只是一个例子):

using (Stream xmlStream = client.OpenRead(xmlUrl))
{
    using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

不仅仅是做得更好:

using (XmlTextReader xmlReader = new XmlTextReader(client.OpenRead(xmlUrl)))
{
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定在这个简短的语法中是否所有资源都将被处理(流)或只有XmlTextReader?

提前感谢您的回答.

Mar*_*ell 21

没有; Stream如果XmlTextReader构造函数抛出异常,则不能保证处理它.但你可以这样做:

using (Stream xmlStream = client.OpenRead(xmlUrl))
using (XmlTextReader xmlReader = new XmlTextReader(xmlStream))
{
    // use xmlReader 
}
Run Code Online (Sandbox Code Playgroud)


Tuu*_*emi 5

使用 C# 8,您甚至可以摆脱单个嵌套级别:

private static void NewMultipleUsingDeclarations()
{
    using var xmlStream = client.OpenRead(xmlUrl);
    using var xmlReader = new XmlTextReader(xmlStream);
    
    // use xmlReader 
}
Run Code Online (Sandbox Code Playgroud)

在内部,编译器创建一个与缩进版本等效的 try catch,并在 using 变量范围的末尾(在本例中,在方法的末尾)处理流和读取器。

查看更多: