你可以在Using块中处理多个对象吗?

时间:2012-09-26 13:40:36

标签: c# .net

如何处理在Using语句中处理掉的多个对象?

示例代码

using(MyClass obj = new MyClass())
{
    MyOtherClass objOC= new MyOtherClass()
    TextReader objTR = new StringReader(...);  
    // other code
}

MyClass obj将在使用块的末尾处理,但那么呢 MyOtherClass objOCTextReader objTR。据我所知,它们不会被处理掉,所以我应该在那里使用嵌套的Using块,如下所示?如果对象数量增加,我将需要一个真正的宽屏幕监视器

以下是否正确?

using(MyClass obj = new MyClass())
{
    using (MyOtherClass objOC= new MyOtherClass())
    {
        using (TextReader objTR = new StringReader(...))
        {
           //code using all three objects 
        }   
    } 
    // other code using just `MyClass obj`
}

MyClass& MyOtherClass都实现了IDisposable

2 个答案:

答案 0 :(得分:57)

是的,您的代码是正确的。以下是您可能想要了解的其他一些事项......

您可以在单个using语句中声明多个相同类型的对象。来自documentation

using (Font font3 = new Font("Arial", 10.0f), 
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

对于使用不同类型的多个对象,您可以使用单行语法进行嵌套以节省空间:

using (MyClass obj = new MyClass())
using (MyOtherClass objOC= new MyOtherClass())
using (TextReader objTR = new StringReader(...))
{
    // code using all three objects 
}   

答案 1 :(得分:2)

是的,如果你想保证对Dispose(..)所有人的using电话,你必须将它们包含在using声明中,如第二个例子所示。

或者您可以在单个{{1}}语句中声明多个对象。这是编码风格和代码流的问题。