【问题标题】:Should I return a null or an empty list? [duplicate]我应该返回一个空列表还是一个空列表? [复制]
【发布时间】:2014-04-17 08:45:01
【问题描述】:

我有一个类型实体列表,它通过实体框架从数据库中获取值。 null 结果集应该返回为 null 还是空列表,如下所示:

    private List<Order> _myOrders;
    public List<Order> myOrder
    {
        get
        {
            return this._myOrders ?? new List<Order>();
        }
        set
        {
            this._myOrders = value;
        }
    }

任何处理代码都会对表使用 count() 而不是“!= null”测试?什么被认为是更好的做法。我怀疑应该尝试管理属性中的空值,否则就会到处编写空测试代码。

想法?

谢谢。

【问题讨论】:

标签: c# linq


【解决方案1】:

我不同意本的观点;尽管如此,他有一个基于广泛接受的理论的好观点。虽然使用 null 返回涉及的错误处理较少,但我更喜欢它而不是空列表,因为在我看来这似乎是对资源的浪费。当然,这是一个非常基于偏好的场景。再说一次,它实际上是基于您的应用程序的整体设计。不管它是空的,你是否打算对该列表做任何事情?如果是这样,那么 null 将不是一种方法。您必须确定简单的.count() 检查是否比您需要编写的额外代码行更重要,以检查 null 以节省资源。至于会节省多少资源——我不知道。考虑到您需要对 null 执行额外检查,您正在用内存换取周期。

对我说的话持保留态度。我才编程一年。

【讨论】:

  • 感谢您的评论。关于资源的有趣点,但我想我会遵循 MS 设计指南......
  • @SamJolly 我同意,山姆。我只是想提供一个不同的视角。通过阅读 MS 指南、Framework Design Guidelines 2nd Edition 和 stackoverflow.com/a/1970001/2006048,很清楚我的知识在哪里。 :)
  • 虽然只是读了第一个 SO,但还是有很多 null protoganists !我为什么看! :)
  • @SamJolly heh,这和其他任何事情一样......总是不止一侧。
【解决方案2】:

我倾向于返回一个空列表。

在概念层面,null 代表未知。在您的情况下,与客户相关的订单不是未知的;相反,没有订单。一个空列表正好代表了这一点,而 null 是不精确的并且可能是模棱两可的——“null”订单是否意味着没有订单或者只是订单属性尚未被填充?

在实际层面,通过返回一个空列表,对订单进行计算的代码可能需要较少的极端情况检查。例如,使用 foreach 遍历订单列表的方法应该可以在长度为零的订单列表中正常工作(不会发生迭代),而对无订单使用 null 则需要该方法进行安全检查。

【讨论】:

  • 谢谢。很有见地。刚刚查看了另一个 SO,MS 设计指南实际上建议返回空列表而不是空值。所以我今天学到了一些东西!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多