【发布时间】:2018-01-07 08:53:36
【问题描述】:
我多次面对这种情况,并不确定最佳做法是什么:
选项 1:
SomeType x = null;
using (var db = new DbEntities())
{
x = db.GetInfo();
}
DoSomethingWith(x);
选项 2:
using (var db = new DbEntities())
{
var x = db.GetInfo();
DoSomethingWith(x);
}
显然 op2 更短,甚至可以进一步压缩,但是当 using 语句是等式的一部分时,这是否使其成为最佳实践?
除了这个具体的例子,一般不要在 using 语句中添加什么?
【问题讨论】:
-
我更喜欢第一个sn-p。
-
这不是偏爱一个或另一个,而是关于代码的作用,特别是
DoSomethingWith方法。但几乎总是您可能会使用第一个选项。 -
不确定这是基于意见的。如果
x是惰性评估选项 1(否则性能更高)将导致一些重大问题。 -
你的观点是错误的。在
using的末尾,资源被确定性地处置。这是重要的一点。您通常希望尽可能早地处置资源,这就是为什么您希望尽可能缩短块(资源的使用)的原因。但这并不能转化为不添加内容的规则列表。套用 Einstein 的话说,using块应该尽可能短,但不能更短。 -
@usefulBee:真正的问题是
db对象在using处理后是否会保持活动状态和需要它。如果db.GetInfo()在打开的连接上返回延迟的 LINQ 查询,该查询直到有人调用x上的方法或属性才实际执行,那么第一个替代方案不是替代方案,而是(相对常见的)编程错误。否则,这很好(但您需要删除= null初始化,因为它会掩盖错误并忘记分配它)。
标签: c# vb.net using-statement