myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Expression<Func<T, T>> aus string erzeugen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Expression<Func<T, T>> aus string erzeugen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl


Golo Roden ist offline

Expression<Func<T, T>> aus string erzeugen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich habe einen Expressiontree vom Typ Expression<Func<string, string>> in einen String umgewandelt, so dass im String nun der eigentliche Code steht.

Wie kann ich aus diesem String, der den Code enthält, den Expressiontree vom Typ Expression<Func<string, string>> wieder erzeugen?

Viele Grüße,


Golo
26.04.2008 15:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.464
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Golo Roden,

du wirst eine Methode Expression.Parse (String) schreiben müssen.

herbivore
26.04.2008 15:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl

Themenstarter Thema begonnen von Golo Roden

Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hm, okay ... gibt's so was nicht irgendwo schon vorgefertigt? Bin doch vermutlich nicht der erste, der so was braucht ;-) ...
26.04.2008 15:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.464
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Golo Roden,

es gibt Parser-Generatoren wie den Klassiker yacc. Aber die sind für einfache Sachen oft überdimensioniert. So schwer ist das für einfache Ausdrücke auch from scratch nicht. Siehe z.B.  [ERLEDIGT] StringToBool - Parser

herbivore
26.04.2008 15:59 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl

Themenstarter Thema begonnen von Golo Roden

Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

hm, also irgendwie stehe ich nach wie vor auf dem Schlauch ... ich habe auf der linken Seite

C#-Code:
Expression<Func<string, string>> transformFunc =

und auf der rechten Seite zum Beispiel so etwas wie

C#-Code:
"c => c.ToLower()"

Wie bekomme ich das nun zusammen? Selbst wenn ich den String parse und in "c", "=>" und "c.ToLower()" zerlege, habe ich doch nach wie vor nur Strings - was mache ich dann damit?

Viele Grüße,


Golo
26.04.2008 20:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
dN!3L dN!3L ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2985.png


Dabei seit: 13.08.2004
Beiträge: 2.891


dN!3L ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Zitat von Golo Roden:
und auf der rechten Seite zum Beispiel so etwas wie

C#-Code:
"c => c.ToLower()"

Hm, wie komplex kann denn die rechte Seite aussehen?
Ich kann dir nur erstmal ein paar Stichworte nennen, mit denen ich meine Recherche anfangen würde: Member(Access?)Expression und LambdaExpression.Compile
(beim LINQ-Provider muss man es anders herum machen [Expression->Irgendwas], ich würde erwarten, dass man das auch in deine gewünschte Richtung hinbekommt.)

Gruß
dN!3L
26.04.2008 23:13 Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.464
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Golo Roden,

Zitat:
Selbst wenn ich den String parse und in "c", "=>" und "c.ToLower()" zerlege, habe ich doch nach wie vor nur Strings - was mache ich dann damit?

wenn du bei den Tokens angekommen bist, musst du daraus/dazu natürlich die passenden Objekte erzeugen.

herbivore
27.04.2008 07:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl

Themenstarter Thema begonnen von Golo Roden

Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da der Ausdruck auf der rechten Seite aber beliebig komplex werden kann, muss ich quasi meinen eigenen C#-Parser schreiben ... na gute Nacht :-(
27.04.2008 08:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
0815Coder
myCSharp.de-Mitglied

avatar-242.gif


Dabei seit: 08.12.2005
Beiträge: 767


0815Coder ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

vielleicht hilft dann der CSharpCodeProvider weiter... sprich du kompilierst was du willst einfach... im Prinzip brauchst du nur etwas Code um die Lambda Expression herum erzeugen.
27.04.2008 10:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl

Themenstarter Thema begonnen von Golo Roden

Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Okay, es geht doch - und zwar deutlich simpler: Mit den LINQ Dynamic Query Expressions führt Microsoft eine Parse- und eine ParseLambda-Methode ein, die einen Expressiontree beziehungsweise einen Lambdaausdruck aus einem String erzeugen.

Genau das war's, was ich brauchte :-).
27.04.2008 10:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Golo Roden Golo Roden ist männlich
myCSharp.de-Mitglied

avatar-2167.png


Dabei seit: 04.10.2003
Beiträge: 4.207
Entwicklungsumgebung: Visual Studio 2010
Herkunft: Riegel am Kaiserstuhl

Themenstarter Thema begonnen von Golo Roden

Golo Roden ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beispiel:

C#-Code:
Expression<Func<string, string>> transformFunc = DynamicExpression.ParseLambda<string, string>("it => it.ToLower()");

Das it steht dabei für die Parameterinstanz.
27.04.2008 13:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 11 Jahre.
Der letzte Beitrag ist älter als 11 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.02.2020 23:06