当集合属性(类型为“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.
}
围绕此事的最佳做法是什么。
答案 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,确保它成为一个属性,公共可变集合字段确实很有用。