Wie kann ich unter Verwendung des bedingten ternären Operators eine Funktion <> zwischen Lambdas zuweisen?
ei Verwendung des bedingten Operators lautet die Syntax im Allgemeinen wie folgt:
int x = 6;
int y = x == 6 ? 5 : 9;
Nichts Besonderes, ziemlich direkt.
Nun versuchen wir, dies zu verwenden, wenn wir einem Func-Typ ein Lambda zuweisen. Lassen Sie mich erklären
Func<Order, bool> predicate = id == null
? p => p.EmployeeID == null
: p => p.EmployeeID == id;
Das ist die gleiche Syntax undsollt Arbeit? Richtig? Aus irgendeinem Grund ist das nicht der Fall. Der Compiler gibt diese nette kryptische Nachricht aus:
Error 1 Der Typ des bedingten Ausdrucks kann nicht bestimmt werden, da keine implizite Konvertierung zwischen 'Lambda-Ausdruck' und 'Lambda-Ausdruck' erfolgt.
Ich ging dann voran und änderte die Syntax und auf diese Weise es did Arbeit
Func<Order, bool> predicate = id == null
? predicate = p => p.EmployeeID == null
: predicate = p => p.EmployeeID == id;
Ich bin nur neugierig, warum es so nicht funktioniert?
(Randnotiz: Ich brauchte diesen Code letztendlich nicht, da ich herausfand, dass Sie beim Vergleichen eines int-Werts mit null einfach object.Equals verwenden.)