Hallo zusammen,
kennt jemand eine möglichkeit einen Func in eine Expression zu konvertieren?
Func<int, int, int> func = (x, y) => x + y;
Expression<Func<int, int, int>> expFunc = ??
Aber bitte nicht so, denn da kommt nicht das selbe bei raus..
Expression<Func<int, int, int>> expFunc = (x,y) => func(x,y);
Habe lange im internet versucht was zu finden jedoch ohne Erfolg.
Ich hoffe ihr könnt mir da weiterhelfen.
Danke und Viele Grüße,
emral
So, dass du anhand der Expression rausbekommst, dass a und b addiert werden? Und nur anhand eines Func-Objekts?
Dann nein. Geht einfach nicht. Func und Expression sehen zwar gleich aus, aber werden vom Compiler grundverschieden verarbeitet (einmal als Delegat und einmal als Ausdrucksbaum). Und die Richtung Func -> Expression bekommt man nicht hin, weil da einfach die nötigen Informationen zu Generierung des Ausdrucksbaums fehlen. Die kann man nur anhand eines Delegats nicht mehr wiederherstellen.
Gruß,
dN!3L
Hallo dN!3L,
zunächst einmal danke für die schnelle Antwort..
Das ist aber gar nicht gut.. Geibt es denn die Möglichkeit func zu serialisieren? So dass ich eine func methode WCF ausführen kann?
Eine Func ist einfach ein Delegat - also im Prinzip ein Zeiger auf eine Methode. Wenn, dann müsstest du das komplette Objekt mit übergeben, an dem diese Methode dann aufgerufen werden kann. Das wird aber nicht so leicht gehen, da WCF ja auf Kontrakten (also Schnittstellen) basiert und keine Implementierungen übertragen werden. Da müsstest du schon eine komplette Assembly übertragen, was dann aber nicht gerade trivial ist.
Eventuell könntest du dein Problem mit Callbacks realisieren. Hast du dir das mal (in Verbindung mit WCF) angeguckt?
Und generell mit Expressions arbeiten geht auch nicht? Denn der Weg Expression -> Func ist sehr einfach.
Wie du auch schon erwähnt hast, habe ich das Problem so gelöst, dass ich mit Expressions arbeite und zur Serialisierung der Expressions den Expression Tree Serializer von codeplex benutze.
Danke nochmals für dein hilfe. 😃
Viele Grüße,
emral