Laden...

Func in Expression konvertieren?

Erstellt von emral86 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.052 Views
E
emral86 Themenstarter:in
59 Beiträge seit 2009
vor 12 Jahren
Func in Expression konvertieren?

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

2.891 Beiträge seit 2004
vor 12 Jahren

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

E
emral86 Themenstarter:in
59 Beiträge seit 2009
vor 12 Jahren

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?

2.891 Beiträge seit 2004
vor 12 Jahren

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.

E
emral86 Themenstarter:in
59 Beiträge seit 2009
vor 12 Jahren

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