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

C#中两种List初始化方式的区别及是否完全等效

C#中两种List初始化方式的区别与对比

核心结论

这两行代码在运行时功能完全一致,都是创建一个空的List<int>实例,但二者在语法版本要求、编译逻辑和使用灵活性上存在差异。

具体差异分析

  • 版本兼容性

    • List<int> list = []; 是C# 9.0及更高版本引入的目标类型集合表达式语法,必须将项目的C#语言版本设置为9.0或以上才能编译通过。
    • List<int> list = new List<int>(); 是从C# 2.0就支持的传统构造函数调用,兼容所有支持List<T>的C#版本。
  • 编译逻辑
    编译器会自动将目标类型集合表达式[]转换为对应类型的构造调用。对于List<int>来说,就是直接调用无参构造函数new List<int>(),因此二者的运行时行为完全相同,前者只是更简洁的语法糖。

  • 使用灵活性

    • 目标类型集合表达式可适配多种集合接口/类型,比如IList<int> list = [];也能直接编译,编译器会自动选择默认实现类型(仍为List<int>);而new List<int>()是明确创建List<int>实例,赋值给接口类型属于向上转型操作。
    • 若要初始化带元素的集合,目标类型表达式写法更简洁:List<int> list = [1, 2, 3];,而构造函数方式需结合集合初始化器:List<int> list = new List<int> { 1, 2, 3 };。

关于ChatGPT判定语法无效的原因

部分版本的ChatGPT训练数据截止到C# 9.0发布之前,或对目标类型集合表达式的语法支持不完整,因此会误判该写法无效。只要你的项目使用C# 9.0及以上版本,[]的初始化写法就是完全合法的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:46:04