从Using操作符内的函数返回

时间:2014-02-03 22:37:30

标签: c# linq-to-sql

下面的伪代码是否正常? 我只是想知道在DataContext之外返回是否总是更好。

public object returnObjectFromDB () { 
   using(var mydatacontext = new Mydatacontext()) 
   { 
       return someobject; 
   }    
}

2 个答案:

答案 0 :(得分:6)

是的,这仍然会执行using语句的finally子句,即处理你的上下文。

测试此方法的一种快速方法是在您正在使用的Dispose方法中抛出异常。

没有一种强有力的约定方式,但是支持这两种方式。我个人不经常这样做,因为我觉得它略微影响了可读性,但这只是我个人的意见。有时我会在达到一个条件时提前返回,这个条件会使数据上下文的其余工作无效。

答案 1 :(得分:2)

如果你的问题是

  

从using语句中返回是否仍然可以正确处理mydatacontext

然后答案肯定是肯定的。 using块实现为try / finally,因此它可以保护dispose免受异常和显式返回的影响。

但如果你的问题是

  

从using语句中返回是否安全?

这需要更多的了解情况。如果someobject与所处理的价值无关,那么这是安全的。但是,如果someobject依赖于该值,那么您可能会遇到麻烦,因为您最终可能会持有处置值。例如,如果代码看起来像这样

return new SomeObject(mydatacontext);

此代码将正确处理mydatacontext,然后返回一个值,该值包含对该已处置值的引用。可能不安全