从“using”语句的作用域内返回?

6

我有一些代码长这样:

using (DBDataContext dc = new DBDataContext(ConnectionString))
{
    Main main = new Main
    {
        ClientTime = clientTime
    };
    dc.Mains.InsertOnSubmit(main);
    dc.SubmitChanges();
    return main.ID;
}

如果我从 "using" 语句块内部返回,那么 "using" 语句块是否仍然会被清理?
5个回答

24

是的,这是使用它的重要优势之一。


虽然双关语让我想打负分,但还是给个正分吧 ;) - johnc

12

是的,这实际上只是一个try/finally语句的等效形式 - 而finally块会在try块无论通过异常、返回语句还是仅仅执行到块末尾退出时都会被执行。


3

是的,它会。


1

是的,在 using 语句的资源获取部分初始化的所有对象实例都会自动调用其 Dispose() 方法。


只有在 using 语句的资源获取部分中指定的对象才会被处理,而在垃圾回收方面没有任何特殊情况发生。 - Jon Skeet
@Jon,谢谢。我没有说得够具体,因此我的答案是错误的。我会修正的。 - Kon
@fallen888 - 我已经修改了它以反映Jon所说的内容,希望你不介意。 - Greg Dean

0

1
RAII是C++独有的,因为它本质上基于C++独特的堆栈对象构造/销毁特性。C#从C++借鉴了这种模式,因为它被证明是有用的,但不得不修改这种模式,因为堆栈对象的构造/销毁方式在C#中与C++不同。 - yfeldblum
@Justice - 这是一个冗长但更有用的版本,比“可怜的尝试”要好得多。 - Daniel Paull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接