我想知道在
using
块内部调用return
是否安全/正确的方法。
例如:
using(var scope = new TransactionScope())
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
我们知道,在最后的右花括号dispose()
会被调用。但在上述情况下会发生什么,因为return
会将控制权跳出给定的范围(据我所知)...
- 我的
scope.Complete()
会被调用吗? - 那么对于范围的
dispose()
方法呢。
using{}
作用域结束,相关对象将被处理,return
将“中断”该作用域 - 因此对象将按预期被处理。 - Shaiscope.Complete()
方法永远不会被执行,因此您的事务将始终回滚。 - Andyusing
的dispose()
,当您返回时,包含此using
块的函数将已经返回,并且属于它的所有内容都将被孤立。因此,即使scope
没有被“使用”处理(正如其他人所解释的那样),它也将被处理,因为函数已经结束了。如果C#有goto
语句——你笑完了吗?好的——那么你可以在不返回的情况下goto
到闭合括号后面。从逻辑上讲,scope
仍然会被处理,但是既然你已经在C#中放置了goto
,那么在这个阶段谁还关心逻辑呢。 - Superbest