C#中是否有自动为类集合成员分配实例的快捷方式?
问题
我定义了如下类:
using System; using System.Collections.Generic; namespace WebApi.Entities { public class Account { ... public List<Schedule> Schedules { get; set; } public List<Function> UserFunctions { get; set; } public List<RefreshToken> RefreshTokens { get; set; }; } }
请问在C#中是否可以让编译器自动为这三个集合成员分配新的集合实例,无需逐个编写new List<>()?
回答
当然可以,有几种简洁的实现方式:
1. 自动属性初始化器(C# 6及以上版本)
直接在属性定义时完成初始化,编译器会自动在实例构造阶段为集合分配实例,无需手动编写构造函数:
using System; using System.Collections.Generic; namespace WebApi.Entities { public class Account { ... public List<Schedule> Schedules { get; set; } = new List<Schedule>(); public List<Function> UserFunctions { get; set; } = new List<Function>(); public List<RefreshToken> RefreshTokens { get; set; } = new List<RefreshToken>(); } }
2. 构造函数统一初始化(兼容早期C#版本)
如果需要兼容C# 6之前的版本,可以在类的构造函数中一次性初始化所有集合成员:
using System; using System.Collections.Generic; namespace WebApi.Entities { public class Account { public Account() { Schedules = new List<Schedule>(); UserFunctions = new List<Function>(); RefreshTokens = new List<RefreshToken>(); } ... public List<Schedule> Schedules { get; set; } public List<Function> UserFunctions { get; set; } public List<RefreshToken> RefreshTokens { get; set; } } }
3. 只读/Init-only属性(C# 9及以上版本,可选优化)
如果不需要后续修改集合的引用(仅需操作集合内元素),可以使用只读属性或C# 9引入的init关键字,确保集合实例只会被初始化一次:
// 只读属性,引用不可变 public List<Schedule> Schedules { get; } = new List<Schedule>(); // C# 9+的init-only属性,仅能在初始化阶段修改引用 public List<Schedule> Schedules { get; init; } = new List<Schedule>();
以上方法都能避免在每个使用场景手动创建集合实例,让代码更简洁易维护。
内容的提问来源于stack exchange,提问作者janci
相关产品推荐
相关产品推荐

