2011-11-22 13 views
5

Sconcertato.Perché questo codice C# non viene compilato quando si utilizzano i parametri denominati?

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) { } 
} 

Qualcuno potrebbe dirmi perché la seconda chiamata a F non riesce a compilare?

(Si noti che questo è un esempio notevolmente ridotto, che è il motivo per cui sembra sintetico.Nel caso reale mi sono imbattuto in, ci sono alcuni parametri predefiniti prima di 'named' e quindi il parametro named è richiesto. apparentemente è la specifica esplicita di "T" dal chiamante.)

+1

sembra un'inadeguatezza dell'inferenza del delegato del compilatore. – Jeff

+0

Suoni probabili. E se lo fai in una risposta, lo accetto. – scobi

risposta

1

Sembra un'inadeguatezza nell'inferenza del tipo di delegato del compilatore ... mi dispiace non posso offrire di più.

+0

Perché il downvote? Nessun altro si è preoccupato di rispondere e l'autore ha dichiarato "Sembra probabile, e se lo fai in una risposta lo accetto". – Jeff

+0

Beh, almeno potrei riportarlo a 0 con il mio voto, heh. – scobi

Problemi correlati