C# 为什么';t数组类有一个costructor(为什么不通过例如new int[])创建它)

C# 为什么';t数组类有一个costructor(为什么不通过例如new int[])创建它),c#,arrays,C#,Arrays,我了解C#中的数组是如何工作的,它们的创建语法只是磁带和方括号(例如,new int[]),后面还可以加上特殊的大括号,其中包含新数组要填充的项 但是,数组在内部是一个(好的,可能不是这样)普通类。作为其中之一,它肯定有一个隐式构造函数(不一定),在创建数组时应该调用它,这应该通过语法反映出来->创建应该是newint[](),而不是它是什么 但显然不是这样,我的问题是为什么。。。是什么导致他们采用这种(非直观的)方式…数组与简单类或其他数据结构非常不同。对于数组,项的内存分配和访问直接由CLR

我了解C#中的数组是如何工作的,它们的创建语法只是磁带和方括号(例如,
new int[]
),后面还可以加上特殊的大括号,其中包含新数组要填充的项

但是,数组在内部是一个(好的,可能不是这样)普通类。作为其中之一,它肯定有一个隐式构造函数(不一定),在创建数组时应该调用它,这应该通过语法反映出来->创建应该是
newint[]()
,而不是它是什么


但显然不是这样,我的问题是为什么。。。是什么导致他们采用这种(非直观的)方式…

数组与简单类或其他数据结构非常不同。对于数组,项的内存分配和访问直接由CLR和/或编译器完成。 对于其他数据结构,这由数据结构代码处理

因此,为了分配一定大小的数组,需要一些语法,让编译器完成这项工作<代码>var arr=新整数[5]

而不是调用数据结构构造函数的语法,如
var list=newlist(5)

您所说的是C#提供的语法糖
System.Array
是抽象的。为什么要这样做?为什么要考虑<代码>新INT[](/<)/代码>直观?更不用说数组是不可变的,所以这种语法只会创建一个空数组<代码> new int []/CODE用于C、C++、java——它实际上是最流行的SythOutoK,但仍然必须有一些继承自Stale.Star的类,具有构造函数,并且对应于int []……“是什么导致他们这样做的(非直觉)”——问它们。我们只能猜测。(我认为@PanagiotisKanavos是正确的,但为了确保我们需要Anders或他的同事参与讨论)如果他们在创建框架时有泛型,那么语法可能是
new Array()