ab56a9bcf7
SVN-Revision: r240
160 lines
5.2 KiB
C#
160 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;
|
|
//}
|
|
|
|
}
|
|
}
|