C#中初始化数组时大括号{}与方括号[]的区别是什么?
C#数组初始化:大括号
{}与方括号[]的差异 你给出的代码里两种写法输出一致,是因为在变量声明并初始化这个场景下,它们最终都创建了相同的int[]实例。但两者本质是不同的语法特性,核心差异如下:
语法适用范围不同
- 大括号
{}是传统的集合初始化器,只能用于变量声明时的初始化,不能单独作为表达式传递或赋值。比如你不能直接写Console.WriteLine({1,2,3}[0]);,也不能给已声明的数组变量赋值arr = {4,5,6};,编译器会直接报错。 - 方括号
[]是C# 12引入的数组字面量,属于独立的表达式,可以在任何需要数组实例的地方使用。比如直接传递给方法DoSomething([1,2,3]);,或者给已有的数组变量赋值arr = [4,5,6];,这些操作大括号都做不到。
- 大括号
类型推断能力不同
- 用
var声明变量时,大括号初始化器无法单独推断类型,比如var arr = {1,2,3};会编译失败——编译器不知道你要创建数组还是其他集合(比如List<int>)。 - 数组字面量
[]可以直接被var推断为对应类型的数组,var arr = [1,2,3];会被编译器自动识别为int[],不需要额外的类型上下文。
- 用
适用的集合类型不同
- 大括号初始化器是通用语法,除了数组,还能初始化所有实现
IEnumerable且包含Add方法的集合类型,比如List<int> list = {1,2,3};、Dictionary<int, string> dict = {{1,"a"}, {2,"b"}};。 - 方括号
[]是专门为数组设计的语法,只能创建数组实例,不能用来初始化其他集合类型。
- 大括号初始化器是通用语法,除了数组,还能初始化所有实现
回到你的代码,int[] array2 = { 1, 2, 3, 4, };和int[] array3 = [1, 2, 3, 4,];在当前场景下行为完全一致,都是初始化一个包含4个int元素的数组,所以输出相同。
内容的提问来源于stack exchange,提问作者AB_ OBADA
相关产品推荐
相关产品推荐

