关于c#:我应该返回null还是空列表?

Should I return a null or an empty list?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
    private List<Order> _myOrders;
    public List<Order> myOrder
    {
        get
        {
            return this._myOrders ?? new List<Order>();
        }
        set
        {
            this._myOrders = value;
        }
    }

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

思想?

谢谢。


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

在概念级别,空表示未知。在您的案例中,与客户相关联的订单并不未知;相反,没有订单。空列表精确地表示这一点,而空列表是不精确的,并且可能是不明确的——"空"订单是指没有订单,还是只是订单属性尚未填充?

在实际级别上,通过返回一个空列表,对订单进行计算的代码可能需要较少的角情况检查。例如,使用foreach迭代订单列表的方法应该可以很好地处理零长度的订单列表(不会发生迭代),而对无订单使用null则需要该方法进行安全检查。


我不同意本的观点;尽管如此,他有一个基于广泛接受的理论的观点。虽然使用空返回的错误处理较少,但我更喜欢它而不是空列表,因为对我来说,它似乎是浪费资源。当然,这是一个非常基于偏好的场景。同样,它是基于应用程序的总体设计的。你打算对那个清单做些什么,不管它是空的吗?如果是这样,那么空值将不是一种方式。您必须决定简单的EDOCX1[0]检查的容易程度是否超过了您需要编写的额外代码行,以检查是否为空以节省资源。至于节约多少资源,我不知道。考虑到您需要对空值执行额外的检查,您需要将内存换成周期。

把我说的话用一点盐吃。我只做了一年的编程。