首页 > 解决方案 > 初始化集合属性好不好

问题描述

初始化集合属性好不好?

例如,我的课是,

 public class Part
 {
        public int Id { get; set; }
        public int PartTypeId { get; set; }        
        public IList<Child> Instructions { get; set; }
 }

像这样初始化指令是个好主意吗?:

public IList<Child> Instructions { get; set; } = new List<Child>();
  1. 最佳实践是什么,默认初始化或不初始化子集合属性?
  2. 考虑延迟初始化好不好?

标签: c#

解决方案


  1. 好吧,如果你不初始化你的集合,你将无法使用它们。如果你要使用一个集合,不妨尽快初始化它,这样你就可以使用它而不必担心空引用。

  2. 不需要懒惰地初始化一个空集合。一个空的集合不需要太多的工作来初始化,并且一旦初始化也不会占用太多的内存。即使您最终没有在应用程序的生命周期内填充它,它也不会对性能产生可衡量的影响。

    非空集合有点不同。如果它是一小部分原始值的集合,它可能也不会产生太大的影响。但是,如果这将是启动时不需要的大型复杂对象的集合,那么懒惰地这样做可能是明智之举。无论您是new在属性声明中使用 a 并单独填充它,还是new按需一次全部填充它,都是一个偏好问题(以及您的应用程序是否依赖于存在的集合 - 大多数应用程序都会询问是否集合是否被填充,这让我们回到我关于空集合的观点)。

正如 Damien_The_Unbeliever 所指出的,您可能不希望您的集合属性可以由类本身以外的任何人设置,如果有的话。您的所有集合操作都将在集合本身上执行,而无需实际更改(或删除)集合,因此不需要设置器,实际上应该省略:

public IList<Child> Instructions { get; } = new List<Child>();

推荐阅读