123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using Microsoft.CSharp;
- using System;
- using System.CodeDom.Compiler;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- namespace SmartCoalApplication.Base.CommTool
- {
- /// <summary>
- /// 公式相关工具类
- /// </summary>
- public class FormulaHelper
- {
- /// <summary>
- /// 计算公式
- /// </summary>
- /// <param name="formula">公式</param>
- /// <returns></returns>
- public static string outPutResult(string formula)
- {
- try
- {
- MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControlClass();
- sc.Language = "JavaScript";
- var str = sc.Eval(formula).ToString();
- return str;
- }
- catch (Exception ex)
- {
- return "0";
- }
- }
- /// <summary>
- /// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法
- /// </summary>
- /// <param name="expression"></param>
- /// <returns></returns>
- public static object Calculate(string expression)
- {
- try
- {
- string className = "Calc";
- string methodName = "Run";
- expression = expression.Replace(" / ", " *1.0/ ");
- // 设置编译参数
- CompilerParameters paras = new CompilerParameters();
- paras.GenerateExecutable = false;
- paras.GenerateInMemory = true;
- // 创建动态代码
- StringBuilder classSource = new StringBuilder();
- classSource.Append(" public class " + className + " \n ");
- classSource.Append(" {\n ");
- classSource.Append(" public object " + methodName + " ()\n ");
- classSource.Append(" {\n ");
- classSource.Append(" return " + expression + " ;\n ");
- classSource.Append(" }\n ");
- classSource.Append(" } ");
- // 编译代码
- CompilerResults result = new CSharpCodeProvider().CompileAssemblyFromSource(paras, classSource.ToString());
- // 获取编译后的程序集。
- Assembly assembly = result.CompiledAssembly;
- // 动态调用方法。
- object eval = assembly.CreateInstance(className);
- MethodInfo method = eval.GetType().GetMethod(methodName);
- object reobj = method.Invoke(eval, null);
- GC.Collect();
- return reobj;
- }
- catch (Exception)
- {
- return "0";
- }
- }
- /// <summary>
- /// 计算 字符串表达式
- /// </summary>
- /// <param name="Formule">字符串计算表达式</param>
- /// <returns></returns>
- public static string CaleByFormule(string Formule)
- {
- try
- {
- Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
- return Microsoft.JScript.Eval.JScriptEvaluate(Formule, ve).ToString();
- }
- catch (Exception)
- {
- return "0";
- }
- }
- }
- }
|