C# 在C中将初始化的数组设置为参数#
可能重复:C# 在C中将初始化的数组设置为参数#,c#,.net,visual-studio,methods,parameters,C#,.net,Visual Studio,Methods,Parameters,可能重复: 这段代码在C#4.0中是正确的 但当应用于数组时,它会给我带来错误 private static void diagonalFill(int[,] a,int[] fillType = {0,-1},int[] diagFill = {-1,1}) { } diagonalFill(array); 谁能给我指一下正确的路吗?10x对于复杂的参考值,默认参数值是不可能的。第一种方法之所以有效,是因为参数是存储在堆栈上的原语,并且是按值复制的。数组是复杂的引
这段代码在C#4.0中是正确的 但当应用于数组时,它会给我带来错误
private static void diagonalFill(int[,] a,int[] fillType = {0,-1},int[] diagFill = {-1,1})
{
}
diagonalFill(array);
谁能给我指一下正确的路吗?10x对于复杂的参考值,默认参数值是不可能的。第一种方法之所以有效,是因为参数是存储在堆栈上的原语,并且是按值复制的。数组是复杂的引用值,因此必须先分配数组,然后才能将其显示为参数 编辑:
@亨克·霍特曼的评论很受欢迎。我不知道堆栈或堆是否在这方面起作用,所以这些信息要么是错误的,要么是误导性的。我知道的主要标准是,只能使用。从 默认值必须是以下表达式类型之一:
上面的“原语”列表链接在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};
...
}
当然,这个解决方案依赖于null不是作为参数传递的选项。字符串也是引用类型,可以作为默认值使用。而堆栈在这里真的不起作用。@HenkHolterman:很公平。这是对我和某人谈话的补充,我找不到任何支持(加上你说的话听起来很合理)。我已经删除了它,并提供了指向的链接,以支持我的声明,即参数必须是原语(或者现在在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};
...
}