C#的数组一定是声明在堆上面吗? 哪怕用初始化列表构造的也是?
int ai[]=new int{1,2,3}这个ai是在堆上面存在的,是吧。
然后如果是不用new直接int bi[]={1,2,3}也能编译运行。请问这个bi是存在于当前的调用栈上面(值类型)还是仍然被编译成了new的形式存在于堆上,是一个有引用计数的对象?
------解决方案--------------------.net 的数组其实是Aarry的子类
------解决方案--------------------查msdn 关于 Array
用reflect
一下子就清楚了
------解决方案--------------------
int[] bi ={1,2,3};
if (bi is Array)
{
string typename = bi.ToString();
}
------解决方案--------------------两种 形式本质是一样的.
都在堆上.
------解决方案--------------------不一定是在堆上,只能说是默认在堆上,你可以指定stackalloc使之存放于栈上
至于你的例子,后面一个就是前面一个的语法糖而已
------解决方案--------------------
stackalloc出来的不是.net的数组,它类似于c中一段内存