Lo screenshot lo dice più o meno. Ho i sovraccarichi visti nello screenshot. Quando si usa una stringa come secondo parametro, il compilatore dovrebbe capire che il primo argomento può essere solo un Func e non un'espressione. Ma il compilatore genera un errore che dice "Un'espressione lamda con un corpo di istruzioni non può essere convertita in un albero di espressioni".Errore del compilatore per sovraccarichi di espressione/Func
Perché il compilatore non riesce a capire il sovraccarico corretto?
Il cast esplicito non aiuta. Ciò che funziona è quando faccio una variabile locale di tipo Func e poi uso questo.
Lo schema utilizzato è FakeItEasy 1.24.0
EDIT:
Ecco il codice che mostra il comportamento:
public static void Main(string[] args)
{
//compiler error
A.CallTo(() => Main(A<string[]>.That.Matches(strings =>
{
return true;
}, "description")));
//compiles
Func<string[], bool> predicate = strings =>
{
return true;
};
A.CallTo(() => Main(A<string[]>.That.Matches(predicate, "description")));
Console.ReadLine();
}
potresti pubblicare il codice non screenshot? – mybirthname
Non si usa 'return' in un corpo lambda di sola espressione ....' string => true' è sufficiente. – leppie
@leppie: corretto, non è questo il punto. Come puoi vedere nello screenshot, il compilatore dovrebbe usare l'overload con Func e quindi un metodo dovrebbe essere corretto. Il compilatore dà invece un errore. La domanda è perché. –
cmart