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

C#中花括号与方括号数组声明的差异及选型疑问

C#数组声明语法:花括号vs集合表达式的差异、场景与性能

一、语法与适用范围差异

  • 旧式花括号初始化器{ ... }
    仅能用于变量声明时直接赋值,或作为数组构造函数的参数(如new int[] {1,2,3}),不能单独作为表达式使用。
    示例:

    // 合法:声明时赋值
    int[] array = {1, 2, 3, 4, 5};
    // 合法:配合new作为构造参数
    DoSomething(new int[] {1,2,3});
    // 非法:不能直接作为方法参数
    // DoSomething({1,2,3});
    
  • 集合表达式[ ... ]
    是独立表达式,可在任何需要集合类型的场景直接使用(方法参数、返回值、赋值给不同集合类型等),还支持..语法展开其他集合元素。
    示例:

    // 合法:声明时赋值
    int[] array = [1, 2, 3, 4, 5];
    // 合法:直接作为方法参数
    DoSomething([1,2,3]);
    // 合法:赋值给非数组集合类型
    List<int> list = [1,2,3];
    // 合法:展开其他集合拼接元素
    int[] otherArr = [4,5];
    int[] combined = [1,2,3, ..otherArr];
    

空数组的特殊情况

  • 花括号写法{}同样受限于声明赋值场景,传递空数组参数必须显式写new int[] {};
  • 集合表达式[]可直接作为空集合表达式使用,自动适配目标类型,比如DoSomething([])可根据方法参数类型传递空数组或空List。

二、场景选择优势

  • 优先用集合表达式的场景:
    • 需要传递集合作为方法参数、返回集合值时,无需显式new或指定类型,代码更简洁;
    • 目标类型不是数组(如List<T>、HashSet<T>)时,集合表达式可直接适配,无需手动转换;
    • 需要拼接多个集合元素时,..展开语法比手动拼接更高效直观。
  • 两种写法均可的场景:
    仅在变量声明时初始化数组,属于风格偏好问题,遵循团队统一规范即可。

三、性能对比

两种语法在性能上无任何差异:

  • 非空数组:编译器会将两种写法编译为完全相同的IL代码,直接创建数组并初始化元素,无额外开销;
  • 空数组:C#编译器会缓存空数组实例,int[] arr = {}和int[] arr = []都会引用同一个缓存的空数组,避免重复创建;
  • 集合表达式适配非数组集合时,编译后的代码与手动编写的集合初始化器完全一致,性能等价。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:18