0

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

例如

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.
}

围绕这个的最佳做法是什么。

4

2 回答 2

3

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

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

if (myList.Contains("Test"))

而不是必须写

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

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

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

于 2013-01-04T09:46:24.270 回答
0

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

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

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

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

因为当您对属性进行操作.Count时它不会抛出。.Where

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

于 2013-01-04T09:52:17.667 回答