如果我有一个像这样的使用块的方法......
public IEnumerable<Person> GetPersons()
{
using (var context = new linqAssignmentsDataContext())
{
return context.Persons.Where(p => p.LastName.Contans("dahl"));
}
}
...从using块中返回值,IDisposable对象是否仍处理掉?
答案 0 :(得分:29)
是的。对象的处理发生在finally块中,该块甚至在返回调用的情况下也执行。它基本上扩展为以下代码
var context = new linqAssignmentsDataContext();
try {
return context.Persons.Where(p => p.LastName.Contans("dahl"));
} finally {
if ( context != null ) {
context.Dispose();
}
}
答案 1 :(得分:7)
using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。
所以对象总是处理好的。除非你插上电源线。