2011-11-22 11 views
5

Baffled.Dlaczego ten kod C# nie kompiluje się podczas używania nazwanych parametrów?

class Test 
{ 
    void Main() 
    { 
     F(() => "");    // ok 
     F(named:() => "");   // 'T' cannot be inferred from the usage! 
     F<string>(() => "");  // ok 
     F<string>(named:() => ""); // ok 
    } 

    void F<T>(Func<T> named) { } 
} 

Czy ktoś może mi powiedzieć, dlaczego nie udało się skompilować drugiego połączenia z F?

(Zwróć uwagę, że jest to znacznie uproszczony przykład, dlatego wydaje się być syntetyczny, ale w prawdziwym przypadku napotkałem kilka domyślnych parametrów przed "nazwanym", więc wymagany jest nazwany parametr. najwyraźniej jest wyraźna specyfikacja "T" przez dzwoniącego.)

+1

wydaje się być niewystarczające w kompilator typ delegata wnioskowania. – Jeff

+0

Dźwięk prawdopodobnie. A jeśli umieścisz ten komentarz w odpowiedzi, zaakceptuję go. – scobi

Odpowiedz

1

Wydaje się, że nieadekwatność w wnioskowania typu delegata kompilatora ... przepraszam, nie mogę zaoferować więcej.

+0

Dlaczego upadek? Nikt nie zadał sobie trudu, by odpowiedzieć, a autor stwierdził: "Dźwięki są prawdopodobne, a jeśli umieścisz ten komentarz w odpowiedzi, zaakceptuję to". – Jeff

+0

Cóż, przynajmniej mógłbym zepchnąć to z powrotem do 0, hej. – scobi

Powiązane problemy