C# Person类中Dictionary类型的PersonProperties属性是否需要显式初始化
结论
分使用场景判断是否需要,优先建议加上初始化赋值,理由如下:
不需要加的唯一情况
你完全确保满足以下两个条件时可以不加:
- 只会使用你当前定义的
Person(int id, Dictionary<string, string> personInfo)带参构造函数实例化对象,不会使用无参构造函数 - 每次调用带参构造函数时,传入的
personInfo参数一定不为null
这种情况下构造函数内已经完成了PersonProperties的赋值,后续遍历操作不会触发空引用异常。
建议加上初始化的核心原因
只要存在以下任意一种场景,不加初始化就会触发NullReferenceException(空引用异常),加初始化相当于加了一层保底防护:
- 你需要用到无参构造函数实例化
Person类,比如:
另外绝大多数序列化、反序列化框架、ORM框架都会默认调用无参构造函数创建对象,这种情况下未初始化的var person = new Person(); // 后续直接操作PersonProperties就会报错 person.PersonProperties.Add("name", "张三");PersonProperties默认值就是null,后续操作直接报错。 - 你无法保证调用带参构造函数时传入的
personInfo一定不为null,如果调用方传了null,构造函数中给PersonProperties赋值后,接下来的foreach遍历代码就会直接抛出空引用异常。 - 后续业务逻辑中存在修改
PersonProperties属性的操作,不小心将其赋值为null时,初始化的空字典也能在赋值前提供保底的默认值,降低出问题的概率。
另外补充:就算你现在的构造函数里会给PersonProperties赋值,属性初始化的逻辑是在构造函数执行前运行的,后续会被构造函数里的赋值覆盖,不会造成额外的性能问题,属于成本极低的健壮性优化。
内容的提问来源于stack exchange,提问作者dragon123
相关产品推荐
相关产品推荐

