【问题标题】:Best practice while representing a collection property doesn't have items表示集合属性时的最佳实践没有项目
【发布时间】:2012-12-18 17:51:32
【问题描述】:

当collection属性(类型为“IList”或Array)时,如果没有元素,它应该为null还是应该表示为一个空的collection(即长度为零)

例如

public class Teacher
{
  public List<Student> Students = null // to represent absence of items
}

public class Teacher
{
   public List<Student> Students = new List<Student>() // Initialize the collection.
}

这方面的最佳做法是什么。

【问题讨论】:

    标签: .net ooad


    【解决方案1】:

    在大多数情况下,这应该是一个空列表。这将简化您的逻辑,因为您不必在使用列表的任何地方进行空值检查。

    例如,如果你想查看列表是否包含元素“Test”,你可以这样做:

    if (myList.Contains("Test"))
    

    不用写了

    if( myList != null && myList.Contains("Test"))
    

    这也是 LINQ 对其扩展方法所做的:如果没有元素,则返回一个空的 IEnumerable,而不是 null。当然,能够链接这些方法调用也很重要。

    当然,在某些情况下,您希望列表为 null 以指示特定的内容,但在大多数情况下,您通过初始化它是在帮自己一个忙。这样你会看到更少的空指针异常;)

    【讨论】:

      【解决方案2】:

      它们可以有完全不同的含义,因此由您(和您的要求)决定什么是正确的代码。

      是没有学生的老师 (Students = null) 和没有学生的老师 (Students.Count == 0) 一样。在数据库术语中,一个相当于列的值null,另一个是值0

      但是,如果这些情况是等价的,那么恕我直言,最好这样做

      public List<Student> Students = new List<Student>();
      

      因为在属性上进行.Count.Where 之类的操作时它不会抛出。

      顺便说一句,一定要把它变成一个属性,公共可变集合字段调试起来肯定很有趣。

      【讨论】:

        猜你喜欢
        • 2013-01-26
        • 2018-10-18
        • 2020-10-21
        • 1970-01-01
        • 2010-09-06
        • 1970-01-01
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多