深入学习 C# 表达式树的最佳资源是啥?

Posted

技术标签:

【中文标题】深入学习 C# 表达式树的最佳资源是啥?【英文标题】:What is the best resource for learning C# expression trees in depth?深入学习 C# 表达式树的最佳资源是什么? 【发布时间】:2010-10-15 13:54:30 【问题描述】:

当我第一次输入这个问题时,我这样做是为了找到重复的问题,我确信肯定有人已经问过这个问题了。我的计划是关注那些欺骗链接而不是发布这个问题。但据我所知,这个问题以前没有被问过……它没有出现在“相关问题”列表中。

您找到了哪些最好的资源(文章、书籍、博客文章等)以深入了解 C# 中的表达式树?我一直对以下内容感到惊讶他们的能力,现在我要说,“好吧,够惊喜了。我想现在停下来,在这些事情上获得博士学位。”我正在寻找能够系统、有条不紊地涵盖这些功能的材料,然后详细介绍您可以使用它们做什么。

注意:我不是在谈论 lambda 表达式。我说的是 Expression 以及所有与它相关并由此产生的东西。

谢谢。

【问题讨论】:

【参考方案1】:

Microsoft Linq 编程(ISBN 13:978-0-7356-2400-9 或 ISBN 10:0-7356-2400-3)的第 11 章(内部表达式树)和第 12 章(扩展 Linq)对于我。我没有读过 Jons 的书,但他是一个有素质的人,而且解释得很好,所以我认为他的报道也会很好。

另一个很棒的资源是Bart De Smet's blog

另外,请密切关注 MSDN,构建 Simple Linq to Database 的示例代码(Pedram Rezaei 撰写)即将获得大约 40 页的 Doco 解释。

Expression Tree Visualiser 调试工具是 Expression Tree 的一个非常非常有用的资源,事实上我认为它是必须拥有的

您还应该尽可能多地了解表达式树访问者,有一个非常好的基类实现 here。

这里是一些从访问者类派生的示例代码,用于进行一些调试(我基于我提到的书中的一些示例代码) prependIndent 方法调用只是在字符串上放置“--”的扩展方法在每个缩进级别。

  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;
    
    ...

【讨论】:

从我在亚马逊上看到的,这本书看起来很不错。感谢分享。 重新成为可视化工具 - 您也可以在一行中完成:marcgravell.blogspot.com/2009/03/…【参考方案2】:

我并不认为它们是全面的,但我有许多 Expression 帖子 on my blog。如果您是英国人,我还将在 5 月在DDD South West 上进行Expression 的会议(和last night,但为时已晚;-p)。如果您愿意,我可以发布幻灯片和相关文章中的一些链接...不幸的是,旨在口语的 pptx 很少能独立阅读。

其他一些读物(不是来自博客):

杰森·博克:genetic programming 和 Expression (又是我):generic operators 和 Expression (同样,在 InfoQ 上)Expression as a Compiler

(以及这里和 microsoft.public.dotnet.languages.csharp 上的大量帖子 - 尝试搜索:+表达式 -regex -“正则表达式”

【讨论】:

+1 - Marc 在表达式树方面比我认识的任何人都更“向上”。 优秀。我会检查这些东西。谢谢。 关于信息,我还向 InfoQ 发布了一些想法:infoq.com/articles/expression-compiler【参考方案3】:

学习计划。表达式使用与 lambda 演算相同的原理,因此会给您一些更好的洞察力。

或者,您可以查看 DLR,它与此类似,但不太优雅。

【讨论】:

以上是关于深入学习 C# 表达式树的最佳资源是啥?的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解Java虚拟机》学习笔记

《深入理解Java虚拟机》学习笔记

学习C#编程经典书籍

《深入浅出WPF》学习笔记之深入浅出话资源

学习 CIL (MSIL) 的最佳资源是啥

使用入门项目学习核心数据的最佳资源是啥? [关闭]