2011-11-08 13 views

Respuesta

3

Los valores de parámetros predeterminados no son posibles con valores de referencia complejos. El primero funciona porque los parámetros son primitivos que se almacenan en la pila y se copian por el valor . Las matrices son valores de referencia complejos, por lo que primero deben asignarse antes de que puedan aparecer como parámetros.

Editar:
comentario de @Henk Holterman es bien recibida. No tengo conocimiento directo de si la pila o el montón entran en juego en esto, por lo que esta información puede ser errónea o engañosa. El criterio principal que conozco es que solo se puede usar primitives types. De this document,

Un valor por defecto debe ser uno de los siguientes tipos de expresiones:

  1. una expresión constante;

  2. una expresión de la forma nueva ValType(), donde ValType es un tipo de valor , como una enumeración o una estructura;

  3. una expresión de la forma predeterminada (ValType), donde ValType es un tipo de valor .

los "primitivos" enlace lista anterior ha sido modificado para el año 2010 para ser llamado tipo "built-in". Puede ser found here.

+0

cadenas también están Referencia tipos y pueden ser utilizados como valores por defecto muy bien. Y la pila realmente no juega un papel aquí. –

+0

@HenkHolterman: suficiente. Eso fue complementario de una conversación que tuve con alguien y no pude encontrar nada para respaldarlo (más lo que dices parece razonable). Lo eliminé y proporcioné enlaces para respaldar mi afirmación de que los parámetros deben ser primitivos (o como se denominan ahora en 2010: tipos incorporados). –

3

Un valor de parámetro predeterminado debe ser una constante de tiempo de compilación, por lo que no puede hacer esto.

2

No puede utilizar los inicializadores como valor predeterminado.

que puede usar:

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

esta solución, por supuesto, depende de que null no sea una opción que se pasará como parámetro. – AndrewC

Cuestiones relacionadas