You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:22:59