Dire che ho il seguente metodo:C# inferenza di tipo non riesce con metodi che contengono i parametri di default
static int MethodWithDefaultParameters(int a, int b=0, int c=1)
{
return a + b + c;
}
E poi io uso questo metodo in una query LINQ in questo modo:
Enumerable.Range(1,10).Select(MethodWithDefaultParameters);
questo viene a mancare con :
Errore 1 Gli argomenti tipo per il metodo 'System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable, System.Func)' non possono essere infe rred dall'uso. Prova a specificare esplicitamente gli argomenti del tipo.
Naturalmente, posso ovviare a questo con l'inserimento di un lambda che inoltra la chiamata di funzione come questa:
Enumerable.Range(1,10).Select(i => MethodWithDefaultParameters(i));
Ma la mia domanda è: perché l'inferenza di tipo fallire? Per quanto posso dire, non dovrebbe essere ambiguo in quanto esiste solo una variante della funzione che soddisfa la variabile di input.
Ottima risposta! – Enigmativity
Aha, per quanto riguarda il motore di inferenza del tipo, la firma per MethodWithDefaultParameters sarà sempre con tre argomenti, cioè non vedrà mai una versione con un solo parametro. Grazie per la spiegazione! – Thaddeus