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.)
sembra un'inadeguatezza dell'inferenza del delegato del compilatore. – Jeff
Suoni probabili. E se lo fai in una risposta, lo accetto. – scobi