using System;using System.Collections.Generic;using System.Web;using System.CodeDom.Compiler;using System.Reflection;namespace WebApplication1{ /// <summary> /// 動態求值 /// </summary> public class FormulaCalculator { /// <summary> /// 計算結果,如果運算式出錯則拋出異常 /// </summary> /// <param name="statement">運算式,如"1+2+3+4"</param> /// <returns>結果</returns> public static object Eval(string statement) { return _evaluatorType.InvokeMember( "Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] { statement } ); } static FormulaCalculator() { //構造JScript的編譯驅動代碼 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代碼 /// </summary> private static readonly string _jscriptSource = @"class Evaluator { public function Eval(expr : String) : String { return eval(expr); } }"; }}
調用方法:string a = FormulaCalculator.Eval("(2000+100)*0.53*16.14+500").ToString();