Files
lserp_cs_6.0/插件库/Lskj.Util/Evaluator.cs
T
2026-07-02 10:11:39 +00:00

161 lines
5.2 KiB
C#

/******************************
* 说明:动态求值(功能类似于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
{
/// <summary>
/// 动态求值(功能类似于Bs Eval)
/// </summary>
public class EvalHelper
{
/// <summary>
/// 数据连接
/// </summary>
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);
}
}";
/// <summary>
/// 构造JScript的编译驱动代码
/// </summary>
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);
}
/// <summary>
/// <para>说明:计算表达式</para>
/// <para>异常:会抛出Exception,遇到无法计算的公式.</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-07-24 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="statement">表达式:如(1+2+3-5)</param>
/// <returns>计算结果</returns>
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;
}
/// <summary>
/// <para>说明:计算表达式</para>
/// <para>异常:会抛出Exception,遇到无法计算的公式.</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2020-03-04 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:2.0</para>
/// </summary>
/// <param name="statement">表达式:如(1+2+3-5)</param>
/// <returns>计算结果</returns>
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;
}
/// <summary>
/// <para>说明:(新版)计算表达式</para>
/// <para>异常:会抛出Exception,遇到无法计算的公式.</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2022-04-12 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="statement">表达式:如(1+2+3-5)</param>
/// <returns>计算结果</returns>
//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;
//}
}
}