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

咨询C#中类似AddRange的集合初始化语法名称及语义

关于C#集合初始化器的说明

嘿,你说的这个语法叫做集合初始化器(Collection Initializer),是C#里专门为集合类型设计的语法糖,刚好适配你描述的场景!

核心特点与适用场景

当你的集合属性只有getter、没有setter,没法直接给属性赋值新的集合实例,也没法直接调用构造函数替换它时,只要这个集合类型满足两个条件:

  • 实现了IEnumerable接口
  • 拥有一个可访问的Add方法(不管是实例方法还是扩展方法)

就能用这个语法向已存在的集合实例中批量添加元素,效果类似多次调用Add方法(和AddRange的批量添加逻辑接近,但本质是逐个调用Add的语法糖)。

代码示例

举个最常见的场景:

public class Order
{
    // 集合属性仅暴露getter,内部已经初始化了List实例
    public List<string> Products { get; } = new List<string>();
}

// 使用集合初始化器向Products添加元素
var myOrder = new Order
{
    Products = { "牛奶", "面包", "鸡蛋" }
};

这里要注意:这个写法不是给Products属性赋值(因为没有setter,赋值会编译报错),而是直接对Products返回的已有List实例,依次调用Add方法添加每个元素。如果集合原本已有元素,新元素会被追加进去。

扩展用法:适配带参数的Add重载

如果集合的Add方法有重载,比如Dictionary<TKey, TValue>的Add(TKey key, TValue value),还能这样使用:

public class Config
{
    public Dictionary<string, string> Settings { get; } = new Dictionary<string, string>();
}

var appConfig = new Config
{
    Settings = { { "Theme", "Dark" }, { "Language", "zh-CN" } }
};

这会自动匹配对应的Add重载,依次添加键值对。

语义确认

你对它的理解完全正确:这种语法的核心是操作已存在的集合实例,而不是创建新集合。它完美解决了集合属性无setter时,无法直接替换集合但需要批量添加元素的问题。

内容的提问来源于stack exchange,提问作者bsinky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:24:43