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

使用集合表达式定义List时会调用哪个构造函数?

C#集合表达式生成List时的构造函数选择

当你使用集合表达式创建List<T>时,编译器的行为取决于元素数量是否在编译时可确定:

  • 固定数量的字面元素集合:比如[a, b, c]这种明确写出所有元素的情况,编译器会直接调用List(int capacity)构造函数,传入的容量等于元素的实际数量。这和你手动使用new List<T>(X)的效果完全一致,不会有默认容量带来的扩容开销。
  • 动态数量的集合:如果集合表达式的元素来自动态枚举(比如[..someEnumerable]),或者元素数量无法在编译期确定,编译器会先调用默认的List()构造函数(初始容量为4),再通过AddRange或逐个添加元素的方式填充列表,这种情况下可能会触发自动扩容。

举个具体的代码对比:

// 编译后等价于 new List<int>(3)
var fixedSizeList = [1, 2, 3];

// 编译后等价于先new List<int>(),再AddRange(Enumerable.Range(1, 5))
var dynamicSizeList = [.. Enumerable.Range(1, 5)];

所以只要你的集合表达式是明确的固定元素列表,编译器会自动帮你优化到指定容量的构造函数,完全不用手动处理,既简化了代码又保留了性能优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:02:02