2012-09-26 35 views
9

in C# è possibile utilizzare i valori di default dei parametri in un metodo, nell'esempio:Metodo valore predefinito parametro array

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

Ma ora voglio utilizzare un array come parametro nel metodo, e impostare un valore predefinito per questo.
Stavo pensando che dovrebbe essere simile a questo:

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

Ma questo non funziona.
C'è un modo corretto per farlo, se questo è addirittura possibile?

+0

Definire "non funziona". – Tudor

+0

Esiste una soluzione alternativa per i tipi di riferimento. Imposta l'argomento default su "null". Quindi, all'interno del blocco del codice, verificare se il parametro è impostato su null, se è impostato su null il valore predefinito per il parametro del tipo di riferimento. –

risposta

15

C'è un modo corretto per farlo, se questo è addirittura possibile?

Questo non è possibile (direttamente) come valore predefinito deve essere uno dei seguenti (da Optional Arguments):

  • un'espressione costante;
  • un'espressione del nuovo modulo ValType(), dove ValType è un tipo di valore, ad esempio un enum o una struct;
  • un'espressione di default del modulo (ValType), dove ValType è un tipo di valore.

La creazione di un array non si adatta a nessuno dei possibili valori predefiniti per gli argomenti facoltativi.

L'opzione migliore è quello di fare un sovraccarico:

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, grazie. Avrò una prova a questo. Lo accetterò come risposta in circa 11 minuti. –

10

Prova questa:

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

Grazie per l'input. Sembra un buon modo per andare, tuttavia mi appresto con la risposta di Reed su questo perché è utile in altri modi anche per me. –

+3

+1 Questo è un approccio rapido, ma non ti dà un modo per distinguere tra un utente che passa in modo nullo * esplicitamente * e semplicemente non usa il parametro (che è il motivo per cui in genere preferisco l'approccio di sovraccarico). Questo può o non può essere importante in questo caso. –

+0

Prego. – Nathan

Problemi correlati