private static object _evaluator = null; private static Type _evaluatorType = null;
>>using System; >>using System.Collections.Generic; >>using System.Text; >>using System.Reflection; >>using System.CodeDom; >>using System.CodeDom.Compiler; >>using Microsoft.JScript; >> >>namespace Vfs.Generic.Dynamic.Expression >>{ >> public class Evaluator >> { >> private static object _evaluator = null; >> private static Type _evaluatorType = null; >> private static readonly string _jscriptSource = @" >> package Evaluator >> { >> class Evaluator >> { >> public function Eval(expr : String) : String >> { >> return eval(expr,""unsafe""); >> } >> } >> } >> "; >> >> static Evaluator() >> { >> CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript"); >> >> CompilerParameters parameters = new CompilerParameters(); >> parameters.GenerateInMemory = true; >> >> CompilerResults results = provider.CompileAssemblyFromSource(parameters, _jscriptSource); >> >> Assembly assembly = results.CompiledAssembly; >> _evaluatorType = assembly.GetType("Evaluator.Evaluator"); >> >> _evaluator = Activator.CreateInstance(_evaluatorType); >> } >> >> public static object EvalToObject(string expression) >> { >> object result; >> >> try >> { >> result = _evaluatorType.InvokeMember( >> "Eval", >> BindingFlags.InvokeMethod, >> null, >> _evaluator, >> new object[] { expression } >> ); >> } >> catch (Exception ex) >> { >> throw new Exception(string.Format("Evaluator: Failed to evaluate expression {0} - {1}", expression, ex.Message)); >> } >> >> return result; >> } >> >> public static string Eval(string expression) >> { >> object o = EvalToObject(expression); >> return o.ToString(); >> } >> } >>} >> >>