.Net学习:IronPython分析Lambda表达式
2009-05-12 22:20:13来源:未知 阅读 ()
在我们的.Net项目中,要使用到自定义公式功能,我们利用了IronPython的Lambda功能,可以方便的计算值,但是我们发现,如果表达式涉及的属性发生改变时,公式必须重新计算,怎样析表达式知道到底访问了哪些属性呢?
在我们的.Net项目中,要使用到自定义公式功能,我们利用了IronPython的Lambda功能,可以方便的计算值,但是我们发现,如果表达式涉及的属性发生改变时,公式必须重新计算,怎样析表达式知道到底访问了哪些属性呢?
仔细研究发现IronPython提供了这样的功能:
以下为引用的内容: SystemState state = new SystemState();CompilerContext context = new CompilerContext(); Parser p = Parser.FromString(state, context, "ActiveObject.Contact.Address + 'ds'"); IronPython.Compiler.Ast.Expression ex = p.ParseTestListAsExpression(); |
上面的代码分析了表达式:ActiveObject.Contact.Address + 'ds', 这里用了Parser类可以分析出表达式,使用VS对象查看器,可以理解结果:
问题还没有完全解决,我想结果有了,我总不能自己递归所有结构吧?哇,怎么也有20多种类型,在看看,嗯,还有这个:
以下为引用的内容: class Program {static void Main(string[] args) { SystemState state = new SystemState(); CompilerContext context = new CompilerContext(); Parser p = Parser.FromString(state, context, "ActiveObject.Contact.Address + 'ds'"); IronPython.Compiler.Ast.Expression ex = p.ParseTestListAsExpression(); MyWalker w = new MyWalker(); ex.Walk(w); } } class MyWalker : AstWalker { public override bool Walk(FieldExpression node) { Console.WriteLine("Walk:{0},{1}", node.Name, node.Target); return base.Walk(node); } } |
Cool!!我重载的虚方法被调用了两次,告诉我有2次字段的访问。
在.NET 3.5中提供了Lambda的结构描述类,但我是没有找到动态编译分析的类。看博客园的朋友说:本来有个DynamicExpression的类提供了动态编译功能,但是现在的.NET 3.5砍掉了,但是在Linq 101 samples中却有源代码,靠。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net定点执行任务的方法 2020-03-18
- 用继承方法实现页面判断session的方法 2020-03-10
- asp.net基础学习之前端页面布局 2019-11-30
- ASP.NET连接 Access数据库的几种方法 2019-11-29
- asp.net基础学习:控件的使用方法 2019-11-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash