In C # gibt es eine Eval-Funktion?

8

Ich tippe eine Gleichung in eine textbox , die den Graph der gegebenen Parabel erzeugt. Ist es möglich, eine Evaluierungsfunktion zu verwenden? Mein C # 2010 hat nicht microsoft.jscript .

    
clay turner 19.05.2011, 00:50
quelle

5 Antworten

23

C # hat keine vergleichbare Eval-Funktion, aber die Erstellung einer solchen ist wirklich einfach:

%Vor%

Nennen Sie es einfach so:

%Vor%     
Teoman Soygul 19.05.2011 00:58
quelle
3

Sie können dies leicht mit der "Compute" -Methode der DataTable-Klasse tun.

%Vor%

Übergeben Sie einen Ausdruck in Form einer Zeichenfolge an die Funktion, um das Ergebnis zu erhalten.

%Vor%     
mar.k 14.08.2014 17:24
quelle
3

Sie können selbst eine mit CodeDom erstellen. Es wird langsam sein, da es bei jedem Aufruf von Eval eine neue Assembly erstellt.

%Vor%     
Raz Megrelidze 13.04.2015 04:50
quelle
1

Es ist möglich, die Namespaces System.Reflection.Emit oder System.CodeDom zu verwenden, aber das ist nicht gerade eine gute Idee, da es keinen Mechanismus gibt, um zu steuern, welche Namespaces verwendet werden und nicht verwendet werden dürfen. Sie schreiben ein eval (), das einfache Ausdrücke erwartet, und das nächste, was Sie wissen, ist ein Benutzer, der Sie verklagt, weil Ihr Code ihnen erlaubt hat, eine Zeichenkette einzugeben, die ihre Festplatte löschte. eval() -ähnliche Funktionen sind riesige klaffende Sicherheitslücken und sollten vermieden werden.

Die bevorzugte Alternative in der .NET-Welt ist eine DSL (domänenspezifische Sprache) . Wenn Sie googeln, können Sie einige vordefinierte DSLs für allgemeine Aufgaben wie zum Beispiel Arithmetik finden.

    
Joel Coehoorn 19.05.2011 01:13
quelle
0

Es gibt keine native C # -Evalfunktion. Aber wie andere bereits gesagt haben, gibt es mehrere Problemumgehungen für das, was Sie versuchen zu tun.

Wenn Sie an der Auswertung komplizierterer C # -Codes interessiert sind, bietet mein C # -EVAL-Programm die Möglichkeit, C # -Code zur Laufzeit auszuwerten und viele C # -Anweisungen zu unterstützen. Tatsächlich ist dieser Code in jedem .NET-Projekt verwendbar, ist jedoch auf die Verwendung von C # -Syntax beschränkt. Weitere Informationen finden Sie auf meiner Website Ссылка .

    
xnaterm 10.06.2011 02:30
quelle

Tags und Links