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

本文关键字:参数 设置 初始化 数组 | 更新日期: 2023-09-27 18:13:57

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

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

static void SomeMethod(int x, int y = 5, int z = 7)
{
}
SomeMethod(1);

但当应用于阵列时,它会给我错误

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

有人能给我指正确的路吗?10倍

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

对于复杂的引用值,默认参数值是不可能的。第一个是有效的,因为参数是存储在堆栈上并按值复制的基本体。数组是复杂的引用值,因此必须先对其进行分配,然后才能显示为参数。

编辑:
@Henk Holterman的评论很受欢迎。我不知道堆栈或堆是否在这方面发挥作用,所以这些信息要么是错误的,要么是误导性的。我知道的主要标准是只能使用基元类型。根据本文件,

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

  1. 常量表达式;

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

  3. 默认形式(ValType(的表达式,其中ValType是一个值类型

上面的"基元"列表链接在2010年被修改为"内置"类型。它可以在这里找到。

默认参数值必须是编译时常数,因此不能执行此操作。

您不能将初始值设定项用作默认值。

您可以使用:

private static void diagonalFill(int[,] a, 
       int[] fillType = null, 
       int[] diagFill = null)
{
  if (fillType == null)
     fillType = new int[] {0,-1};
  if (diagFill == null)
     diagFill = new int[] {-1,1};
  ... 
}