我刚刚发现 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。

10-06 00:38