2012-09-26 33 views
9

en C# es posible utilizar valores de los parámetros predeterminados en un método, en el ejemplo:Método valor predeterminado matriz de parámetros

public void SomeMethod(String someString = "string value") 
{ 
    Debug.WriteLine(someString); 
} 

pero ahora quiero utilizar una matriz como el parámetro en el método, y establecer una valor predeterminado para ello.
estaba pensando que debería ser algo como esto:

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"}) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 

Pero esto no funciona.
¿Hay una manera correcta de hacer esto, si esto es posible?

+0

Definir "no funciona". – Tudor

+0

Hay una solución para los tipos de referencia. Establezca el argumento predeterminado en "nulo". Luego, dentro del bloque de código, compruebe si el parámetro se establece en nulo, si es nulo, establezca el valor predeterminado para el parámetro de tipo de referencia. –

Respuesta

15

¿Hay una manera correcta de hacer esto, si esto es posible?

Esto no es posible (directamente) como el valor predeterminado debe ser uno de los siguientes (a partir de Optional Arguments):

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

La creación de una matriz no se ajusta a ninguno de los valores predeterminados posibles para los argumentos opcionales.

La mejor opción aquí es hacer una sobrecarga:

public void SomeMethod() 
{ 
    SomeMethod(new[] {"value 1", "value 2", "value 3"}); 
} 


public void SomeMethod(String[] arrayString) 
{ 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
+0

Ok, gracias. Voy a intentar esto. Aceptaré esto como mi respuesta en aproximadamente 11 minutos. –

10

Prueba esto:

public void SomeMethod(String[] arrayString = null) 
{ 
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"}; 
    foreach(someString in arrayString) 
    { 
     Debug.WriteLine(someString); 
    } 
} 
someMethod(); 
+0

Gracias por su aporte. Parece una buena manera de hacerlo, sin embargo, voy a seguir con la respuesta de Reed en este caso, ya que también es útil en otros aspectos. –

+3

+1 Este es un enfoque hábil, pero no le da una manera de diferenciar entre un usuario que pasa nulo * explícitamente * y simplemente no usa el parámetro (por lo que normalmente prefiero el enfoque de sobrecarga). Eso puede o no ser importante en este caso. –

+0

De nada. – Nathan

Cuestiones relacionadas