在C#中,是一个声明如下的数组:int[]a={numbers…};在堆栈中?

在C#中,是一个声明如下的数组:int[]a={numbers…};在堆栈中?,c#,memory,stack,heap,C#,Memory,Stack,Heap,在C#中,当我声明如下数组时: int []a = {1, 2, 3, 4, 5} 这是在堆栈中声明的吗 据我所知,我应该这样做: int []a = new int[5]{1, 2, 3, 4, 5}; 考虑到数组是引用类型。这两者之间没有区别 第一个只是一个语法糖(),用于保存多次击键 它们都在堆中声明(只要它们都是相同的数组),引用在堆栈中声明。因此,只要您超出范围,对象就会变得不被引用,并且符合垃圾收集的条件。实际上有一种方法可以在堆栈中存储数组: (来自) 但由于使用了指针,这需要

在C#中,当我声明如下数组时:

int []a = {1, 2, 3, 4, 5}
这是在堆栈中声明的吗

据我所知,我应该这样做:

int []a = new int[5]{1, 2, 3, 4, 5};

考虑到数组是引用类型。

这两者之间没有区别

第一个只是一个语法糖(),用于保存多次击键


它们都在堆中声明(只要它们都是相同的数组),引用在堆栈中声明。因此,只要您超出范围,对象就会变得不被引用,并且符合垃圾收集的条件。

实际上有一种方法可以在堆栈中存储数组:

(来自)


但由于使用了指针,这需要一个不安全的代码区域。

您不应该这样做。:)
“正确”的声明应该是

int[] a = ...

两种语法都将在堆上声明INT为值类型


int[]a={1,2,3,4,5}这个语法是另一个有趣的语法的一个小小的缩写。。不是直接的回答。是的,不是直接的回答。。。我认为如果他正在寻找一种进行堆栈分配的方法,它可能会很有用。它是有效的语法:。事实上,这是令人困惑的,但仍然有效——我不知道为什么这会得到一张赞成票。没有回答这个问题,而且,正如你似乎不知道的那样,C#在这方面对空格不敏感。我没有说它是无效的。我说这是不正确的,事实确实如此。已经有很好的答案涵盖了OP问题的其余部分,所以我忽略了这一点,但回答了可能更重要的部分。仅仅因为你可以编写格式糟糕的代码并将其编译,并不意味着这样做是正确的。@Coxy:那么你需要定义“correct”。从语言语法的角度来看,这是完全正确的。所有其他的事情-只是一个特定的代码约定。我假设其中一些需要使用
int[]a
int[]a
而不是
int[]a
。格式化是非常私密的事情,甚至不要试图让别人相信你的观点比别人的观点更自信。现在语言好多了;)为什么这很重要?上下文
int[] a = ...