Code
sing System;
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;

/// <summary>
///Evaluator 的摘要说明
/// </summary>
/// 
namespace ItDeer.Public
{
    public class Evaluator
    {
        object _compiled = null;

private string m_formula;

///   <summary>   
        ///   计算公式   
        ///   </summary>   
        public string Formula
        {
            get
            {
                return m_formula;
            }
            set
            {
                m_formula = value;
            }
        }

public Evaluator()
        {
        }

public Evaluator(string formula)
        {
            Formula = formula;
        }

public Double Execute()
        {
            if (Formula == null || Formula == "")
            {
                throw new Exception("请先设置Formula属性!");
            }
            return this.Execute(Formula);
        }
        public Double Execute(string formula)
        {
            constructEvaluator(formula);
            MethodInfo m = _compiled.GetType().GetMethod("GetValue");
            return (Double)m.Invoke(_compiled, null);
        }
        private void constructEvaluator(string formula)
        {
            ICodeCompiler compiler = (new CSharpCodeProvider().CreateCompiler());
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");

cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;

StringBuilder str = new StringBuilder();
            str.Append("using   System;   \n");
            str.Append("namespace   Stoway   {   \n");
            str.Append("public   class   Formula   {   \n");

str.AppendFormat(" public   {0}   GetValue()", "Double");
            str.Append("{");
            str.AppendFormat(" return   Convert.ToDouble({0});   ", formula);
            str.Append("}\n");
            str.Append("}\n");
            str.Append("}");

CompilerResults cr = compiler.CompileAssemblyFromSource(cp, str.ToString());
            if (cr.Errors.HasErrors)
            {
                throw new Exception("不是正确的表达式");
            }
            Assembly a = cr.CompiledAssembly;
            _compiled = a.CreateInstance("Stoway.Formula");
        }
        public static Double GetValue(string formula)
        {
            return new Evaluator().Execute(formula);
        }
    }
}

转载于:https://www.cnblogs.com/nba4523/archive/2008/12/25/1362156.html

调用ICodeCompiler来计算字符串表达式相关推荐

  1. php二元表达式,PHP 计算字符串表达式(二) | 剑花烟雨江南

    由于eval()在安全性上存在问题,因此需考虑使用其余办法解决字符串表达式的计算.在数据结构中,栈(stack)是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数 ...

  2. java实现计算字符串表达式

    ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByNa ...

  3. python算法——字符串表达式的计算

    preface:最近有个面试,被要求给出一个字符串表达式,计算出结果.本以为是见到过的,想着用一个栈,然后被面试官打断说你这样是有问题的,然后想了说用树,又被打断说是有问题的,再仔细想想.结果还是没整 ...

  4. java 计算运算表达式_java字符串运算表达式的计算

    一道面试题,如何不拆分字符串,对字符串表达式进行计算,形如:String str = "5+2-1" 1.[代码][Java]代码 import java.math.BigDeci ...

  5. DOM中setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。

    setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. <html> <head> <script type="text/javascript ...

  6. [算法 笔记]字符串表达式计算(简易版)

    题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...

  7. 分享Java 中如何运行字符串表达式?

    2019独角兽企业重金招聘Python工程师标准>>> 在日常的开发中,偶尔会遇到运行字符串表达式的情况,通常这样的需求会对需求进行进一步分析,然后进行进一步 "特殊化&q ...

  8. 表达式 控件 html,获取HTML表单控件的UrlEncode字符串表达式

    /** * *  UrlEncode *  http://www.cnitblog.com/9jian/ * *  获取 Input(checkbox,radio,text,password).Tex ...

  9. 计算字符串和文件的MD5值

    1 //计算字符串MD5 2 public static string GetStringMd5(string txt) 3 { 4 MD5CryptoServiceProvider md5 = ne ...

  10. 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )

    文章目录 一.strlen 与 sizeof 函数 二.计算 字符串长度 与 内存块大小 一.strlen 与 sizeof 函数 strlen() 函数的作用是获取字符串大小 , 其原理是 从 内存 ...

最新文章

  1. Django 模型成员2.2
  2. 在Linux的Eclipse下搭建Android环境
  3. 虚拟机上无法运行Gazebo的问题?
  4. MyCat 入门指南
  5. webpack2.x 中文文档 翻译 之 出口Output
  6. (Spinner) android中Spinner的使用
  7. 单片机位寻址举例_单片机的寻址方式
  8. 20180105随笔
  9. 定制控件消息处理函数
  10. 使用字节流复制一个文件夹
  11. 【word论文排版教程1】页面设置
  12. vyos配置src-nat
  13. 【MAX7800羽毛板更新固件及下载bug修复】
  14. 不可重复读和幻读有什么区别?
  15. Jenkins系列之——第三章 Jenkins编译的第一个项目
  16. 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
  17. 2019最新Android常用开源库总结(持续更新,建议收藏)
  18. 知识点 - 分拆数/整数拆分
  19. web前端学习(四)——HTML5的超链接标签设置(页面间链接、锚链接以及邮件链接)
  20. 如何检查叶绿体基因组组装结果的准确性v1

热门文章

  1. 柳暗花明 | 海归小硕的求职之路
  2. 赛尔笔记 | 自然语言处理中的迁移学习(下)
  3. 每日算法系列【LeetCode 875】爱吃香蕉的珂珂
  4. python生成词云教程(附带QQ聊天记录生成词云实战)
  5. ECNU·AntNLP主页船新上线!
  6. pytorch---模型加载与保存(6)通过设备保存/加载模型
  7. 关系抽取---(二)卷积神经网络
  8. LeetCode学习记录(1-3)
  9. 寻路算法:找到NPC最好的行走路径
  10. Yahoo!用户体验与设计前副总裁推荐——《设计模式》