从'using'块中调用'return'时会发生什么?

Byr*_*ahl 18 c# idisposable using-statement

如果我有一个像这样的使用块的方法...

    public IEnumerable<Person> GetPersons()
    {
        using (var context = new linqAssignmentsDataContext())
        {
            return context.Persons.Where(p => p.LastName.Contans("dahl"));
        }
    }
Run Code Online (Sandbox Code Playgroud)

...从using块中返回值,IDisposable对象是否仍然处理?

Jar*_*Par 29

是的,它确实.对象的处理发生在finally块中,该块甚至在返回调用的情况下也执行.它基本上扩展为以下代码

var context = new linqAssignmentsDataContext();
try {
  return context.Persons.Where(p => p.LastName.Contans("dahl"));
} finally {
  if ( context != null ) {
    context.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)


And*_*Dog 7

MSDN文档:

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句.

所以对象总是处理好的.除非你插上电源线.

  • "所以物体总是被处理掉.除非你插上电源线." - 在这种情况下,物体被放置为电子分散;-) (13认同)