Konwersje Lambda z niejasnym typem powrotu i rozdzielczością przeciążenia [duplikat]

To pytanie ma już tutaj odpowiedź:

Specyficzna rozdzielczość przeciążenia z while (true) 1 odpowiedź

Jeśli mam lambdę taką jak() => { throw new Exception(); }, nie jest jasne, czy ma typ powrotu, czy nie. Z tego powodu może być (niejawnie) przekonwertowany na obaAction iFunc<object> (lub jakikolwiek innyFunc<T>). Dzieje się tak, ponieważ zgodnie z §6.5Konwersje funkcji anonimowych specyfikacji C # 4:

[A] typ delegataD jest kompatybilny z funkcją anonimowąF opatrzony:

JeśliD mavoid typ powrotu i treśćF jest blokiem oświadczeń, gdy […] treśćF jest prawidłowym blokiem instrukcji, w którym żadna instrukcja return nie określa wyrażenia.

JeśliD ma typ nie-pustego powrotu i treśćF jest blokiem oświadczeń, gdy […] treśćF jest prawidłowym blokiem instrukcji z nieosiągalnym punktem końcowym, w którym każdyreturn instrukcja określa wyrażenie, które jest niejawnie konwertowane na typ zwracanyD.

Ale jeśli mam dwa przeciążenia metody, gdzie jeden ma parametr typuAction i inniFunc<object>i przekazuję mu lambdę z góry,Func<object> używane jest przeciążenie. Czemu? Która część specyfikacji mówi takFunc<object> jest lepszy niżAction w tym przypadku?

Spojrzałem na §7.5.3.2Lepszy członek funkcji, ale to nie wyjaśnia tego.

questionAnswers(1)

yourAnswerToTheQuestion