将初始化的数组设置为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倍
对于复杂的引用值,默认参数值是不可能的。第一个是有效的,因为参数是存储在堆栈上并按值复制的基本体。数组是复杂的引用值,因此必须先对其进行分配,然后才能显示为参数。
编辑:
@Henk Holterman的评论很受欢迎。我不知道堆栈或堆是否在这方面发挥作用,所以这些信息要么是错误的,要么是误导性的。我知道的主要标准是只能使用基元类型。根据本文件,
默认值必须是以下类型的表达式之一:
常量表达式;
形式为new ValType((的表达式,其中ValType是一个值类型,例如枚举或结构;
默认形式(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};
...
}