Using system; using system. collections. generic; using system. web; using system. codedom. compiler; using system. reflection; namespace webapplication1 {/// <summary> /// dynamic evaluation // </Summary> public class formulacalculator {/// <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 formulacalculator () {// 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 = 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 );}}";}}
Call method: string a = formulacalculator. eval ("(2000 + 100) * 0.53*16.14 + 500"). tostring ();