2012-10-05 13 views
11

Quindi vedo che è possibile avere una firma del metodo in cui il primo parametro fornisce un valore predefinito e il secondo parametro è una raccolta params.Argomento facoltativo seguito da Params

Quello che non riesco a vedere è un modo per utilizzare effettivamente il valore predefinito del primo argomento.

È possibile?

metodo Esempio:

void WaitAllTasks(string message = "Running Task.WaitAll", params Task[] tasks);

ho inizialmente provato omettendo il parametro di messaggio quando si chiama il metodo e anche provato ad utilizzare parametri denominati, che non funziona con params.

Compila, ma è possibile utilizzarlo?

risposta

23

posso trovare tre modi di chiamare il metodo senza specificare un valore per il primo parametro:

using System; 

class Test 
{ 
    static void PrintValues(string title = "Default", 
          params int[] values) 
    { 
     Console.WriteLine("{0}: {1}", title, 
          string.Join(", ", values)); 
    } 

    static void Main() 
    { 
     // Explicitly specify the argument name and build the array 
     PrintValues(values: new int[] { 10, 20 }); 
     // Explicitly specify the argument name and provide a single value 
     PrintValues(values: 10); 
     // No arguments: default the title, empty array 
     PrintValues(); 
    } 
} 

non ho trovato un modo per specificare valori multipli senza costruire esplicitamente l'array anche se ...

+0

E la riflessione? – Servy

+0

@Servy: No, reflection richiede di specificare tutti gli argomenti. –

+1

È strano che il compilatore C# non permetta l'uso di valori '{10,20}' o 'valori: (10,20)'. Ho cercato parecchio e sembra che la tua strada sia la migliore. – gdoron

Problemi correlati