什么是深入学习C#expression式树的最佳资源?

当我第一次input这个问题的时候,我是这样做的,为了find重复的问题,确信有人肯定已经问过这个问题。 我的计划是遵循这些欺骗链接,而不是张贴这个问题。 但是,就我所见,这个问题还没有被问到……它在“相关问题”列表中没有出现。

为了深入理解C#中的expression式树,您发现了哪些最好的资源(文章,书籍,博文等)? 我一直对自己的能力感到惊讶,而现在我正要说的是:“好吧,足够的惊喜,我现在要停下来,拿到这些东西的博士学位。 我正在寻找系统地,有条不紊地涵盖这些function的材料,然后详细介绍可以用它们做什么的详细示例。

注意:我不是在谈论lambdaexpression式。 我正在谈论expression<T>和所有与之相关的事物,并从中产生。

谢谢。

编程Microsoft Linq(ISBN 13:978-0-7356-2400-9或ISBN 10:0-7356-2400-3)的第11章(内部expression式树)和第12章(扩展Linq)对我来说是非常宝贵的。 我没有读Jons的书,但他是一个优秀的人,对事情做得很好,所以我认为他的报道也是很好的。

另一个很好的资源是Bart De Smet的博客

另外,请关注MSDN,构build一个简单的Linq to数据库的示例代码(由Pedram Rezaei提供)即将获得大约40页的Doco解释。

Expression Tree实际上非常有用的资源,实际上我认为它是一个必须有的 Expression Tree Visualiserdebugging工具。

你也应该尽可能地学习Expression Tree Visitors,这里有一个相当不错的基类实现。

这里是一些派生自Visitor类的示例代码来进行一些debugging(我基于这本书中提到的一些示例代码),prependIndent方法调用只是一个string的扩展方法,在每个缩进处放置一个“ – ”水平。

internal class DebugDisplayTree : ExpressionVisitor { private int indentLevel = 0; protected override System.Linq.Expressions.Expression Visit(Expression exp) { if (exp != null) { Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel)); } indentLevel++; Expression result = base.Visit(exp); indentLevel--; return result; } ... 

我不认为他们是全面的,但我的博客上有很多Expression职位。 如果你是英国的话,我也会在五月份的时候在DDD西南部的一个演讲会上发言( 昨天晚上 ,但是太晚了; -p)。 我可以张贴幻灯片和一些相关文章的链接,如果你想…不幸的是,一个旨在被发表的PPTX很less做出明智的独立阅读。

其他一些阅读(而不是从博客):

  • Jason Bock:用Expression 遗传编程
  • (我再次): 通用运算符与Expression
  • (再次,在InfoQ上) Expression作为一个编译器

(和这里和microsoft.public.dotnet.languages.csharp的职位整个负载 – 尝试search:+expression式 – 正则expression式 – “正则expression式”

学习计划。 expression式使用与lambda微积分相同的原理,因此会给你一些更好的见解。

另外,你可以看看DLR,这是一个类似,但更不优雅。