2012-10-05 11 views
11

Widzę więc, że możliwe jest podpisanie metody, gdzie pierwszy parametr zapewnia wartość domyślną, a drugi parametr jest zbiorem params.Argument opcjonalny, po którym następują Params

To, czego nie widzę, to sposób na wykorzystanie wartości domyślnej pierwszego argumentu.

Czy to w ogóle możliwe?

Przykład metoda:

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

początkowo próbował pomijając parametr wiadomość podczas wywoływania metody, a także próbowali za pomocą nazwanych parametrów, które nie współpracują z params.

Kompiluje, ale czy można z niego korzystać?

Odpowiedz

23

znajdę trzy sposoby wywołania metody bez określenia wartości dla pierwszego parametru:

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

nie znalazłem sposobu określania wiele wartości bez wyraźnego budynku tablicę chociaż ...

+0

A co z refleksją? – Servy

+0

@Servy: Nie, odbicie wymagałoby podania wszystkich argumentów. –

+1

To dziwne, że kompilator C# nie zezwala na używanie "wartości: {10,20}" lub "wartości: (10,20)". Szukałem całkiem sporo i wygląda na to, że twoja droga jest najlepsza. – gdoron