/****************************** * 说明:动态求值(功能类似于Bs Eval) * 创建人:龚宇超 * 创建日期:2017-07-24 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.CodeDom.Compiler; using System.Data; using System.Data.SqlClient; using Microsoft.JScript; using Microsoft.JScript.Vsa; using Lskj.Expression; namespace Lskj.Util { /// /// 动态求值(功能类似于Bs Eval) /// public class EvalHelper { /// /// 数据连接 /// public static SqlConnection _connection; private static object mEvaluator = null; private static Type mEvaluatorType = null; private static readonly string mJscriptSource = @"class Evaluator { public function Eval(expr : String) : String { return eval(expr); } }"; /// /// 构造JScript的编译驱动代码 /// static EvalHelper() { //CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript"); //CompilerParameters parameters; //parameters = new CompilerParameters(); //parameters.GenerateInMemory = true; //CompilerResults results; //results = provider.CompileAssemblyFromSource(parameters, mJscriptSource); //Assembly assembly = results.CompiledAssembly; //mEvaluatorType = assembly.GetType("Evaluator"); //mEvaluator = Activator.CreateInstance(mEvaluatorType); } /// /// 说明:计算表达式 /// 异常:会抛出Exception,遇到无法计算的公式. /// 创建人:龚宇超 /// 创建日期:2017-07-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 表达式:如(1+2+3-5) /// 计算结果 public static object Eval(string statement) { return Eval2(statement); //object obj = string.Empty; //try //{ // obj = mEvaluatorType.InvokeMember( // "Eval", // BindingFlags.InvokeMethod, // null, // mEvaluator, // new object[] { statement } // ); //} //catch (Exception e) //{ //} //return obj; } /// /// 说明:计算表达式 /// 异常:会抛出Exception,遇到无法计算的公式. /// 创建人:王一帆 /// 创建日期:2020-03-04 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:2.0 /// /// 表达式:如(1+2+3-5) /// 计算结果 public static object Eval2(string statement) { object obj = string.Empty; try { JSCaller caller = new JSCaller(); obj = caller.Eval(statement); //obj = "0"; //obj = _evaluatorType.InvokeMember( // "Eval", // BindingFlags.InvokeMethod, // null, // _evaluator, // new object[] { statement } // ); } catch (Exception ex) { //MessageBox.Show("请仔细检查配置列条件[" + statement + "]" + ex.StackTrace + "\r\n" + ex.Message); } //if (string.IsNullOrEmpty(obj + "")) // return true; return obj; } /// /// 说明:(新版)计算表达式 /// 异常:会抛出Exception,遇到无法计算的公式. /// 创建人:王一帆 /// 创建日期:2022-04-12 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// 表达式:如(1+2+3-5) /// 计算结果 //public static object Eval(string statement) //{ // object obj = string.Empty; // try // { // Express exp = new Express("", statement); // obj = exp.Eval((DataRow)null); // } // catch (Exception e) // { // } // return obj; //} } }