基线 SVN r240
SVN-Revision: r240
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
/******************************
|
||||
* 说明:动态求值(功能类似于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;
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user