我刚刚发现 C# 的 stackalloc
符号有一个令人难以置信的怪癖,请参阅以下代码:
// int *p;
// p = stackalloc int[42]; // won't work!
// Error CS1525: Unexpected symbol `stackalloc' (CS1525)
int *p = stackalloc int[42]; //works
我的目的是在这样的三元表达式中使用 stackalloc:
int *p = size > 0xFFFFF ? (int*)Marshal.AllocHGlobal(size).ToPointer() : stackalloc int[size];
编译器完全出乎意料的罢工使我震惊。如果有人能对这种奇怪的行为有所了解,我将不胜感激。我已经在单声道和 .net 上对其进行了测试,但都不起作用。
最佳答案
http://msdn.microsoft.com/en-us/library/cx9s2sy4(v=vs.100).aspx
只有在声明和初始化局部变量时才能使用 stackalloc。