2011-11-08 39 views

回答

3

对于复杂的参考值,默认参数值是不可能的。第一个工作原因是参数是原始码 ,它们存储在堆栈中,并被值 复制。数组是复杂的参考值,因此它们必须先被分配,然后才能显示为参数。

编辑:
@亨克Holterman的评论很好。我并没有直接了解堆栈或堆是否发挥作用,所以这些信息要么是错误的,要么是误导性的。我知道的主要标准是只能使用primitives types。从this document

的缺省值必须是以下类型的表达式中的一个:

  1. 常量表达式;

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

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

的“原始人”列表上面的链接已被修改,于2010年被称为“内置”的类型。它可以是found here

+0

串也引用类型和它们可以被用来作为默认就好了。堆栈在这里确实不起作用。 –

+0

@亨克·霍特曼:够公平的。这是对我与某人的对话的补充,我无法找到任何支持它的东西(加上你说的听起来很合理)。我已经击败了它并提供了链接以支持我的声明,即参数必须是原语(或者现在在2010年称为 - 内置类型)。 –

3

默认参数值必须是编译时间常量,所以你不能这样做。

2

您不能使用初始值作为默认值。

你可以使用:

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}; 

    ... 
} 
+0

这个解决方案当然依赖于null,它不是一个永远不会作为参数传递的选项。 – AndrewC