表示集合属性时的最佳实践没有项目

时间:2013-01-04 09:44:03

标签: .net ooad

当集合属性(类型为“IList”或Array)时,如果没有元素,它应该为null,还是应该表示为空集合(即length为零)

e.g。

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

OR

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

围绕此事的最佳做法是什么。

2 个答案:

答案 0 :(得分:3)

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

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

if (myList.Contains("Test"))

而不是写

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

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

当然,在某些情况下,您希望列表为空以指示特定的内容,但在大多数情况下,您通过初始化来帮助自己。你会看到很少的空指针异常;)

答案 1 :(得分:0)

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

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

但是,如果这些案例与恕我直言相同,那么最好做

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

因为当您在属性上执行.Count.Where等操作时,它不会抛出。

BTW,确保它成为一个属性,公共可变集合字段确实很有用。