Using System;
Using System. Collections. Generic;
Using System. LINQ;
Using System. text;
UsingSystem. codedom. compiler;
UsingSystem. 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, such as "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 ()
{< br> /// construct the JScript compilation driver Code
codedomprovider provider = codedomprovider. createprovider ( " JScript " );
compilerparameters;
parameters = New compilerparameters ();
parameters. generateinmemory = true ;
Compilerresults results;
Results=Provider. compileassemblyfromsource (parameters, _ jscriptsource );
Assembly=Results. compiledassembly;
_ Evaluatortype=Assembly. GetType ("Evaluator");
_ evaluator = activator. createinstance (_ evaluatortype);
}
Private Static Object_ Evaluator= Null;
Private StaticType _ evaluatortype= Null;
/// <Summary>
/// JScript code
/// </Summary>
Private Static Readonly String _ Jscriptsource =
@" Class Evaluator
{
Public Function eval (expr: string): String
{
Return eval (expr );
}
} " ;
}
}
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
}
}