Der Screenshot sagt es ziemlich viel. Ich habe die Überladungen wie auf dem Screenshot zu sehen. Wenn ein String als zweiter Parameter verwendet wird, sollte der Compiler herausfinden, dass das erste Argument nur ein Func und kein Ausdruck sein kann. Der Compiler gibt jedoch einen Fehler aus, der besagt, dass ein Lamda-Ausdruck mit einem Anweisungskörper nicht in einen Ausdrucksbaum konvertiert werden kann.Compiler Fehler für Ausdruck/Func Überladungen
Warum kann der Compiler die richtige Überladung nicht herausfinden?
Explizite Besetzung hilft nicht. Was funktioniert, ist, wenn ich eine lokale Variable vom Typ Func mache und diese stattdessen benutze.
Das Framework verwendet wird, ist FakeItEasy 1.24.0
EDIT:
Hier ist der Code, der das Verhalten zeigt:
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();
}
könnten Sie den Code nicht screenshot posten? – mybirthname
Sie verwenden 'return' nicht in einem Ausdruck-nur-Lambda-Körper ....' string => true' ist ausreichend. – leppie
@leppie: richtig, das ist nicht der Punkt, obwohl. Wie Sie auf dem Screenshot sehen können, sollte der Compiler die Überladung mit einem Func verwenden und daher sollte ein Methodenhauptteil in Ordnung sein. Der Compiler gibt stattdessen einen Fehler aus. Die Frage ist warum. –
cmart