在C#中实现类似Eval这类动态求值的函数【转载】
来源:互联网 发布:淘宝原单鞋子店铺推荐 编辑:程序博客网 时间:2024/06/01 10:44
陈希章
原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/04/23/1442037.html原文标题:在C#中实现类似Eval这类动态求值的函数【转载】
原文发表:2009/4/23 6:33:00
这是一个很平常的需求,就好比说,给你一个字符串,1+2+3, 要动态计算它的结果。在VBS或者JAVASCRIPT这种脚本语言中,都有一个Eval方法。但在C#或者VB.NET中却没有。今天想起来研究一下,发现有朋友已经实现了。请参考下面的连接。很有意思的,呵呵
本文转载自 http://www.cnblogs.com/kingthy/archive/2007/12/15/995641.html
using System;
using System.CodeDom.Compiler;
using System.Reflection;
///
/// 动态求值
///
public class Evaluator
{
///
/// 计算结果,如果表达式出错则抛出异常
///
/// 表达式,如"1+2+3+4"
///
public static object Eval(string statement)
{
return _evaluatorType.InvokeMember(
"Eval",
BindingFlags.InvokeMethod,
null,
_evaluator,
new object[] { statement }
);
}
///
///
///
static Evaluator()
{
//构造JScript的编译驱动代码
CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
Assembly assembly = results.CompiledAssembly;
_evaluatorType = assembly.GetType("Evaluator");
_evaluator = Activator.CreateInstance(_evaluatorType);
}
private static object _evaluator = null;
private static Type _evaluatorType = null;
///
/// JScript代码
///
private static readonly string _jscriptSource =
@"class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}";
}
这里还有一个更加复杂的实现方式
http://www.cnblogs.com/michaelhuwei/archive/2007/12/29/1019658.html
http://www.yaosansi.com/post/446.html
还有一个更加好的例子
http://www.codeproject.com/KB/cs/runtime_eval.aspx
利用动态编译的机制实现
作者:陈希章出处:http://blog.csdn.net/chen_xizhang
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- 在C#中实现类似Eval这类动态求值的函数【转载】
- c#中实现类似js的Eval方法(2011-03
- Java类中获取文件的方式以及实现一个类似js中的eval函数
- 在C#中实现类似C++函数指针数组的功能
- 在c#中实现类似c/c++函数指针的功能
- 在Javascript中Eval函数的使用eval()函数
- 在C++中实现类似C#的字符串格式功能
- 在SQL中如何实现类似C#的switch语句
- 在Javascript中Eval函数的使用?
- 在Javascript中Eval函数的使用
- 在Javascript中Eval函数的使用
- 在Javascript中Eval函数的使用
- 实现JavaScript中eval()函数的功能
- 在C#中如何调用EVAL函数方法
- 在C#中调用EVAL函数方法,通过字符串计算
- 在java中利用动态编译实现eval
- 在java中利用动态编译实现eval
- 在java中利用动态编译实现eval
- 数据搜索算法
- ArraySegment 的使用 【转载】
- 数组和集合的整理
- SQL Server中的命名管道(named pipe)及其使用
- 行内数据
- 在C#中实现类似Eval这类动态求值的函数【转载】
- 利用CodeDom和反射动态编译并执行程序集
- REST 的知识 【转载】
- Mashup 【转载】
- URLRewriting for ASP.NET
- SQL Server 2008中的FileStream支持
- SQL Server 2008中的稀疏列和列集
- SQL Server 2008中的hierarchyid
- SQL Server 2008 T-SQL之Merge语法