调用ICodeCompiler来计算字符串表达式
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来计算字符串表达式相关推荐
- php二元表达式,PHP 计算字符串表达式(二) | 剑花烟雨江南
由于eval()在安全性上存在问题,因此需考虑使用其余办法解决字符串表达式的计算.在数据结构中,栈(stack)是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数 ...
- java实现计算字符串表达式
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByNa ...
- python算法——字符串表达式的计算
preface:最近有个面试,被要求给出一个字符串表达式,计算出结果.本以为是见到过的,想着用一个栈,然后被面试官打断说你这样是有问题的,然后想了说用树,又被打断说是有问题的,再仔细想想.结果还是没整 ...
- java 计算运算表达式_java字符串运算表达式的计算
一道面试题,如何不拆分字符串,对字符串表达式进行计算,形如:String str = "5+2-1" 1.[代码][Java]代码 import java.math.BigDeci ...
- DOM中setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. <html> <head> <script type="text/javascript ...
- [算法 笔记]字符串表达式计算(简易版)
题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等.例如,str="10+50+2*6/3",result=64. 解析: 考虑算术表达式计算规则: ...
- 分享Java 中如何运行字符串表达式?
2019独角兽企业重金招聘Python工程师标准>>> 在日常的开发中,偶尔会遇到运行字符串表达式的情况,通常这样的需求会对需求进行进一步分析,然后进行进一步 "特殊化&q ...
- 表达式 控件 html,获取HTML表单控件的UrlEncode字符串表达式
/** * * UrlEncode * http://www.cnitblog.com/9jian/ * * 获取 Input(checkbox,radio,text,password).Tex ...
- 计算字符串和文件的MD5值
1 //计算字符串MD5 2 public static string GetStringMd5(string txt) 3 { 4 MD5CryptoServiceProvider md5 = ne ...
- 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )
文章目录 一.strlen 与 sizeof 函数 二.计算 字符串长度 与 内存块大小 一.strlen 与 sizeof 函数 strlen() 函数的作用是获取字符串大小 , 其原理是 从 内存 ...
最新文章
- Django 模型成员2.2
- 在Linux的Eclipse下搭建Android环境
- 虚拟机上无法运行Gazebo的问题?
- MyCat 入门指南
- webpack2.x 中文文档 翻译 之 出口Output
- (Spinner) android中Spinner的使用
- 单片机位寻址举例_单片机的寻址方式
- 20180105随笔
- 定制控件消息处理函数
- 使用字节流复制一个文件夹
- 【word论文排版教程1】页面设置
- vyos配置src-nat
- 【MAX7800羽毛板更新固件及下载bug修复】
- 不可重复读和幻读有什么区别?
- Jenkins系列之——第三章 Jenkins编译的第一个项目
- 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
- 2019最新Android常用开源库总结(持续更新,建议收藏)
- 知识点 - 分拆数/整数拆分
- web前端学习(四)——HTML5的超链接标签设置(页面间链接、锚链接以及邮件链接)
- 如何检查叶绿体基因组组装结果的准确性v1