在下面的代码中:

unsafe
{
    int m = 10;
    int n = 10;
    double*[] a = new double*[m];
    for (int i = 0; i < m; i++)
    {
        double* temp = stackalloc double[n];
        a[i] = temp;
    }
}


有什么方法可以删除多余的变量temp

代码:

a[i] = stackalloc double[n];


有编译器错误:


  严重性代码说明项目文件行抑制状态
  错误CS8346将类型为'double'的stackalloc表达式转换为
  不能输入“ double *”。

最佳答案

是否仅在定义指针的同一行中使用stackalloc


是的,这是必需的according to the C# language specification

具体来说,请参见“堆栈分配”部分,该部分将语法指定为:

local_variable_initializer_unsafe
    : stackalloc_initializer
    ;

stackalloc_initializer
    : 'stackalloc' unmanaged_type '[' expression ']'
    ;


如您所见,必须将local_variable_initializer_unsafestackalloc_initializer一起使用,这意味着必须声明一个局部变量才能使用stackalloc的结果进行初始化。

(从技术上讲,您可以根据需要在语句中放入尽可能多的换行符,但是我敢肯定这不是您要的!)

08-05 12:25