繁体   English   中英

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

[英]What is the best resource for learning C# expression trees in depth?

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

为了深入了解C#中的表达式树,你找到了哪些最好的资源(文章,书籍,博客文章等)? 我一直对他们的能力感到惊讶,现在我正处在我说的地方,“好吧,足够的惊喜。我现在想停下来获得这些东西的博士学位。” 我正在寻找系统,有条理地涵盖功能的材料,然后详细介绍了如何使用它们。

注意:我不是在谈论lambda表达式。 我在谈论Expression <T>以及随之而来的所有事情。

谢谢。

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

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

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

对于Expression Tree来说,一个真正非常有用的资源实际上我认为它必须具备 Expression Tree Visualiser调试工具。

你也应该学习尽可能多地了解表达式树游客,有一个相当不错的基类inplementation 这里

以下是从该Visitor类派生的一些示例代码,用于进行一些调试(我基于我提到的书中的一些示例代码)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;
    }
    ...

我并不认为它们是全面的,但我的博客上有很多Expression帖子。 如果你是英国人,我也将在5月份在DDD西南部 (和昨晚 ,但为时已晚;-p)举办关于Expression的会议。 我可以发布幻灯片和相关文章中的一些链接,如果你想...不幸的是,一个pptx打算说话很少做出明智的独立阅读。

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

(以及在microsoft.public.dotnet.languages.csharp上的一大堆帖子 - 尝试搜索:+ expression -regex - “正则表达式”

学习计划。 表达式使用与lambda演算相同的原则,因此可以为您提供更好的洞察力。

或者,你可以看看DLR,这是一个类似但不那么优雅的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM