Erstellen Sie Ausdrucksbäume, um If-Else darzustellen

c# expression-trees

Frage

Die Deserialisierung des Ausdrucksbaums mit ExpressionSerialization bei einem vollständigen Bedingungsausdruck, dh bei einem ternären Operator, führt zu einem Fehler. Wenn ich einen ternären Operator verwende, verursacht dies FullConditionExpression (System Not Supported Exception)

Code aus folgenden Links verwenden:

http://archive.msdn.microsoft.com/exprerserialization

Gibt es eine aktuelle Version für den obigen Link?

http://metalinq.codeplex.com/

Habe es danach versucht

public Expression<Func<object, string>> LabelCriteria { get; set; }

LabelCriteria = x =>
    {
      if (true)
          return "Cash";
      else      
          return " ";
    }

Ausdruck unterstützt nicht, wenn - else blockieren. Es gibt einen Fehler wie "Ein Lambda-Ausdruck mit einem Anweisungskörper kann nicht in einen Ausdrucksbaum konvertiert werden. Gibt es einen anderen Weg, dies zu tun.

Akzeptierte Antwort

Du könntest eine Methode wie hier verwenden:

string myFunction(Object obj){
     //here your if-else...
}

LabelCriteria = x => myFunction(x);

Beliebte Antwort

Sie müssen den bedingten Operator verwenden:

LabelCriteria = x => true ? "Cash" : " ";

Es kann sein, dass der Compiler den Ausdruck wegen der konstanten Faltung modifiziert, da die Bedingung ein konstanter Ausdruck ist ( true ). Versuchen Sie es mit einer Variablen und sehen Sie, was passiert.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum