使用带有多个变量的语句

Ant*_*ott 303 c# using-statement

通过以某种方式在同一个使用块中声明2变量,是否可以使这个代码更紧凑?

using (var sr = new StringReader(content))
{
    using (var xtr = new XmlTextReader(sr))
    {
        obj = XmlSerializer.Deserialize(xtr) as TModel;
    }
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 553

接受的方式只是链接声明:

using (var sr = new StringReader(content))
using (var xtr = new XmlTextReader(sr))
{
    obj = XmlSerializer.Deserialize(xtr) as TModel;
}
Run Code Online (Sandbox Code Playgroud)

请注意,IDE也将支持此缩进,即它有意不会尝试缩进第二个using语句.

  • @ MD.Unicorn是的,确切地说.这是故意的 - 这是C#提供的最简洁的方法:删除括号并省略缩进.请注意IDE如何为此提供*explicit*支持(否则它将缩进第二个语句). (11认同)
  • 我真的希望C#有一种"使用"的形式,它没有开始一个新的块,而是将变量放在它们被声明的块的末尾,例如:`{using var x = new Reader( ); x.Read(); }` (9认同)
  • @peachykeen是的,它绝对不是*离散语言功能,只是嵌套块.尽管如此,IDE*会*专门用于缩进. (4认同)
  • @KonradRudolph我的问题有点混乱,但我问这是否实际上是为多个`using`s设计的离散语言特征,或者与if(x)if(y){z; }`.不过,我认为你的评论会回答这个问题.我正在读它作为后者? (2认同)
  • IL代码仍然保持不变。在所有两个嵌套的try finally块中,将在IL代码中生成该块。稍后实例化的xtr变量放置在内部的finally块中,而之前实例化的sr变量放置在外部的finally块中。 (2认同)

Fra*_*ack 124

以下仅适用于相同类型的实例!感谢您的评论.

此示例代码来自MSDN:

using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于变量属于同一类型的情况. (31认同)
  • 然后将变量声明为IDisposable并在以后转换? (4认同)
  • 如果两个对象属于同一类型,这似乎才起作用 (2认同)