Create a class that implements the eval method in JS
Code
Using system;
Using system. Collections. Generic;
Using system. LINQ;
Using system. text;
Using system. codedom. compiler;
Using System. Reflection;
Namespace Eval_Demo
{
/// <Summary>
/// Dynamic Evaluation
/// </Summary>
Public class Evaluator
{
/// <Summary>
/// Calculation result. If an expression error occurs, an exception is thrown.
/// </Summary>
/// <Param name = "statement"> expression, for example, "1 + 2 + 3 + 4" </param>
/// <Returns> result </returns>
Public static object eval (string Statement)
{
Return _ evaluatortype. invokemember (
"Eval ",
Bindingflags. invokemethod,
Null,
_ Evaluator,
New object [] {statement}
);
}
Static Evaluator ()
{
// Construct the JScript compilation driver code
CodeDomProvider provider = CodeDomProvider. CreateProvider ("JScript ");
CompilerParameters parameters;
Parameters = new CompilerParameters ();
Parameters. GenerateInMemory = true;
CompilerResults results;
Results = provider. CompileAssemblyFromSource (parameters, _ jscriptSource );
Assembly assembly = results. CompiledAssembly;
_ EvaluatorType = assembly. GetType ("Evaluator ");
_ Evaluator = Activator. CreateInstance (_ evaluatorType );
}
Private static object _ evaluator = null;
Private static Type _ evaluatorType = null;
/// <Summary>
/// JScript code
/// </Summary>
Private static readonly string _ jscriptSource =
@ "Class Evaluator
{
Public function Eval (expr: String): String
{
Return eval (expr );
}
}";
}
}
Called classes
Code
Class Program
{
Static void main (string [] ARGs)
{
Console. writeline (Evaluator. eval ("1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9"); // 45
Console. writeline (Evaluator. eval ("(10-2)/2 + 1) * 3"); // 15
}
}