Zrzut ekranu przedstawia go w dużym stopniu. Mam przeciążenia, jak widać na zrzucie ekranu. Używając łańcucha jako drugiego parametru, kompilator powinien zorientować się, że pierwszym argumentem może być tylko Func, a nie wyrażenie. Ale kompilator zgłasza błąd: "Wyrażenie lamda z treścią instrukcji nie może zostać przekonwertowane na drzewo wyrażeń".Błąd kompilatora dla przeciążenia Expression/Func
Dlaczego kompilator nie może odczytać prawidłowego przeciążenia?
Jawne rzucanie nie pomaga. To, co działa, gdy robię lokalną zmienną typu Func, a następnie użyj tego zamiast tego.
Ramy stosowany jest FakeItEasy 1.24.0
EDIT:
Oto kod, który pokazuje zachowanie:
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();
}
czy możesz opublikować kod, nie zrzut ekranu? – mybirthname
Nie powinieneś używać 'return' w ciele lambda z wyrażeniem .....' string => true' jest wystarczające. – leppie
@leppie: poprawne, nie o to jednak chodzi. Jak widać na zrzucie ekranu, kompilator powinien używać przeciążenia z Func i dlatego treść metody powinna być w porządku. Zamiast tego kompilator podaje błąd. Pytanie brzmi: dlaczego? –
cmart