【问题标题】:What not to add within a using statement?在 using 语句中不能添加什么?
【发布时间】: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


【解决方案1】:

如果 DoSomethingWith(x) 仅在 using 语句中有效,则选择选项 2,否则选择选项 1。如果您想知道是否有任何优化可以从任一选择中获得,如果我错了,请纠正我,但我没有'不明白为什么会有。

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多