下面的伪代码是否正常? 我只是想知道在DataContext之外返回是否总是更好。
public object returnObjectFromDB () {
using(var mydatacontext = new Mydatacontext())
{
return someobject;
}
}
答案 0 :(得分:6)
是的,这仍然会执行using语句的finally
子句,即处理你的上下文。
测试此方法的一种快速方法是在您正在使用的Dispose方法中抛出异常。
没有一种强有力的约定方式,但是支持这两种方式。我个人不经常这样做,因为我觉得它略微影响了可读性,但这只是我个人的意见。有时我会在达到一个条件时提前返回,这个条件会使数据上下文的其余工作无效。
答案 1 :(得分:2)
如果你的问题是
从using语句中返回是否仍然可以正确处理
mydatacontext
?
然后答案肯定是肯定的。 using
块实现为try / finally
,因此它可以保护dispose免受异常和显式返回的影响。
但如果你的问题是
从using语句中返回是否安全?
这需要更多的了解情况。如果someobject
与所处理的价值无关,那么这是安全的。但是,如果someobject
依赖于该值,那么您可能会遇到麻烦,因为您最终可能会持有处置值。例如,如果代码看起来像这样
return new SomeObject(mydatacontext);
此代码将正确处理mydatacontext
,然后返回一个值,该值包含对该已处置值的引用。可能不安全