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

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

public IEnumerable GetPersons() { using (var context = new linqAssignmentsDataContext()) { return context.Persons.Where(p => p.LastName.Contans("dahl")); } } 

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

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

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

从MSDN文档 :

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

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