Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将初始化的数组设置为参数#_C#_.net_Visual Studio_Methods_Parameters - Fatal编程技术网

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对于复杂的参考值,默认参数值是不可能的。第一种方法之所以有效,是因为参数是存储在堆栈上的原语,并且是按值复制的。数组是复杂的引用值,因此必须先分配数组,然后才能将其显示为参数

编辑:
@亨克·霍特曼的评论很受欢迎。我不知道堆栈或堆是否在这方面起作用,所以这些信息要么是错误的,要么是误导性的。我知道的主要标准是,只能使用。从

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

  • 恒定的表达式

  • 形式为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};
    
      ... 
    }
    

    当然,这个解决方案依赖于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};
    
      ... 
    }