在C#中将初始化数组设置为参数

kid*_*won 5 .net c# parameters methods visual-studio

可能重复:
将空数组作为c#中可选参数的默认值传递

此代码在C#4.0中是正确的

static void SomeMethod(int x, int y = 5, int z = 7)
{
}
SomeMethod(1);
Run Code Online (Sandbox Code Playgroud)

但是当应用于数组时它会给我带来错误

private static void diagonalFill(int[,] a,int[] fillType = {0,-1},int[] diagFill = {-1,1})
    {

    }
    diagonalFill(array);
Run Code Online (Sandbox Code Playgroud)

有人能告诉我正确的方法吗?10倍

Joe*_*ton 3

默认参数值不可能与复杂的参考值一起使用。第一个可行,因为参数是存储在堆栈上并按值复制的原语。数组是复杂的引用值,因此必须先对其进行分配,然后才能作为参数出现。

编辑:
@Henk Holterman 的评论很受欢迎。我不直接了解堆栈或堆是否在此方面发挥作用,因此此信息要么是错误的,要么是误导性的。我知道的主要标准是只能使用基元类型。这份文件来看,

默认值必须是以下类型的表达式之一:

  1. 常量表达式;

  2. new ValType() 形式的表达式,其中 ValType 是值类型,例如枚举或结构;

  3. default(ValType) 形式的表达式,其中 ValType 是值类型。

上面的“基元”列表链接已在 2010 年修改为“内置”类型。在这里能找到它。