c# - 初始化集合属性好不好
问题描述
初始化集合属性好不好?
例如,我的课是,
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>();
- 最佳实践是什么,默认初始化或不初始化子集合属性?
- 考虑延迟初始化好不好?
解决方案
好吧,如果你不初始化你的集合,你将无法使用它们。如果你要使用一个集合,不妨尽快初始化它,这样你就可以使用它而不必担心空引用。
不需要懒惰地初始化一个空集合。一个空的集合不需要太多的工作来初始化,并且一旦初始化也不会占用太多的内存。即使您最终没有在应用程序的生命周期内填充它,它也不会对性能产生可衡量的影响。
非空集合有点不同。如果它是一小部分原始值的集合,它可能也不会产生太大的影响。但是,如果这将是启动时不需要的大型复杂对象的集合,那么懒惰地这样做可能是明智之举。无论您是
new
在属性声明中使用 a 并单独填充它,还是new
按需一次全部填充它,都是一个偏好问题(以及您的应用程序是否依赖于存在的集合 - 大多数应用程序都会询问是否集合是否被填充,这让我们回到我关于空集合的观点)。
正如 Damien_The_Unbeliever 所指出的,您可能不希望您的集合属性可以由类本身以外的任何人设置,如果有的话。您的所有集合操作都将在集合本身上执行,而无需实际更改(或删除)集合,因此不需要设置器,实际上应该省略:
public IList<Child> Instructions { get; } = new List<Child>();
推荐阅读
- c++ - 如何在其聚合初始化程序中使用类静态对象的大小?
- html - 移动下划线在标题下方并位于左侧
- c++ - Clang 和 MSVC 的模板模板参数推导失败,但 GCC 成功
- java - 添加 Apache POI 作为外部库后应用程序立即崩溃
- php - 在 html标签中显示来自 curl 请求的图像
- apache-kafka - Kafka 消费者何时重试?
- ffmpeg - FFMPEG 在剪辑结束时切断音频
- apache-kafka - LogCompaction and consumer in Kafka
- r - Create sequence of values based on multiple column values in R
- node.js - How do I get my async function to return values not a promise?