Parametry opcjonalne to funkcja językowa, kompilator odpowiada za tłumaczenie wywołań metod z parametrami opcjonalnymi do pełnego wywoływania z wartościami.
Spójrz na ten prosty kawałek kodu poniżej,
public void GeneralMethod()
{
TestMethod(6);
}
public bool TestMethod(int a, int b = 8)
{
return true;
}
Kiedy demontować tych metod, można zauważyć, że kompilator C# faktycznie otrzymuje wezwanie do TestMethod z jednego parametru do rozmowy z obu parametrów. Zrzut ekranu z ildasm dowodzi, że
Teraz Jadąc do aktualnego problemu, wiersz kodu w pytaniu próbuje powiązać Func z metodą, która ma parametry opcjonalne. Jeśli kompilator C# musi sobie z tym poradzić, musi upewnić się, że Func zna wartości domyślne. Chociaż mogło to zostać osiągnięte przez kompilator, całkowicie zniszczyło to cel Func.
Celem Func jest zapewnienie sposobu na przechowywanie metod anonimowych w sposób uogólniony i prosty. "reference
Innym podobne pytanie na stackoverflow można znaleźć here
rozwiązanie @Chris Sinclaira działa obejść tworząc anonimową metodę, która przyjmuje jeden parametr i wywołuje TryMethod z ciała tej anonimowej metody.
Tak rozumiem, mając 'Func tryMethodFunc => (value) => TryMethod (wartość)' nie jest wystarczająca? –
Hmmm, to działa. Domyślam się, że jestem nowy w podejściu funkcjonalnym. to jako odpowiedź, a ja ją oznaczyę: – Firestrand
Możesz zaznaczyć odpowiedź KeYana; jest dość obszerny i zawiera moje obejście. –