没有关键字“ new”的数组初始化

Ger*_*ner 1 c# arrays heap stack

在C#中,可以像下面的示例一样在不使用关键字“ new”的情况下初始化数组:

int[] x = { 10, 20, 30 };
Run Code Online (Sandbox Code Playgroud)

这是否意味着数组将在堆栈上初始化,因为关键字“ new”对于在堆上进行初始化是必需的?

Bas*_*Bas 5

简短答案:不可以。

您显示的代码int[] x = new [] { 10, 20, 30 }
是简写,int[] x = new int[] { 10, 20, 30}
而简写是int[] x = new int[3]; x[0] = 10; x[1] = 20; x[2] = 30;

(请参阅MSDN

在实现上没有区别。

stackalloc正如在注释中指出的那样,在堆栈上分配数组的唯一方法是使用带有关键字的不安全代码。来自MSDN的示例:

int* block = stackalloc int[100];
Run Code Online (Sandbox Code Playgroud)