文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何创建LINQ Expression tree节点

2023-06-17 22:31

关注

小编给大家分享一下如何创建LINQ Expression tree节点,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创建LINQ Expression tree节点

当了解LINQ Expression tree的概念后,就可以来讨论一下这棵树里面的节点该如何创建。LINQ Expression tree节点一般是通过System.Linq.Expression.Expression这个类上的工厂方法来创建的。包括以下的一些方法:

Add                : BinaryExpression    AddChecked         : BinaryExpression    And                : BinaryExpression    AndAlso            : BinaryExpression    ArrayIndex         : BinaryExpression    ArrayLength        : UnaryExpression    Call               : MethodCallExpression    Coalesce           : BinaryExpression    Condition          : ConditionalExpression    Constant           : ConstantExpression    Convert            : UnaryExpression    ConvertChecked     : UnaryExpression    Divide             : BinaryExpression    Equal              : BinaryExpression    ExclusiveOr        : BinaryExpression    Field              : MemberExpression    GreaterThan        : BinaryExpression    GreaterThanOrEqual : BinaryExpression    Invoke             : InvocationExpression    Lambda             : Expression<TDelegate>    LeftShift          : BinaryExpression    LessThan           : BinaryExpression    LessThanOrEqual    : BinaryExpression    ListInit           : ListInitExpression    MakeBinary         : BinaryExpression    MakeMemberAccess   : MemberExpression    MakeUnary          : UnaryExpression    MemberInit         : MemberInitExpression    Modulo             : BinaryExpression    Multiply           : BinaryExpression    MultiplyChecked    : BinaryExpression    Negate             : UnaryExpression    NegateChecked      : UnaryExpression    New                : NewExpression    NewArrayBounds     : NewArrayExpression    NewArrayInit       : NewArrayExpression    Not                : UnaryExpression    NotEqual           : BinaryExpression    Or                 : BinaryExpression    OrElse             : BinaryExpression    Parameter          : ParameterExpression    Power              : BinaryExpression    Property           : MemberExpression    PropertyOrField    : MemberExpression    Quote              : UnaryExpression    RightShift         : BinaryExpression    Subtract           : BinaryExpression    SubtractChecked    : BinaryExpression    TypeAs             : UnaryExpression    TypeIs             : TypeBinaryExpression    UnaryPlus          : UnaryExpression

上述列表中每个名字其实对应着一组重载,参数不同,但返回值的类型是一样的。这些工厂方法所生成的表达式的意义应该说还是很直观的,就不特别介绍了。经常跟编译器打交道的话应该对这些名字尤其熟悉。

这些工厂方法对应的类的层次结构是:

System.Object  System.Linq.Expressions.Expression  System.Linq.Expressions.BinaryExpression  System.Linq.Expressions.ConditionalExpression  System.Linq.Expressions.ConstantExpression  System.Linq.Expressions.InvocationExpression  System.Linq.Expressions.LambdaExpression  System.Linq.Expressions.Expression<TDelegate> System.Linq.Expressions.MemberExpression  System.Linq.Expressions.MethodCallExpression  System.Linq.Expressions.NewExpression  System.Linq.Expressions.NewArrayExpression  System.Linq.Expressions.MemberInitExpression  System.Linq.Expressions.ListInitExpression  System.Linq.Expressions.ParameterExpression  System.Linq.Expressions.TypeBinaryExpression  System.Linq.Expressions.UnaryExpression

观察可得知,LINQ Expression tree节点中的类只能用于表现表达式,而无法表现“更大”的语法结构,例如赋值表达式、一般语句等。这是LINQ v1的一个重要限制,也是为什么C# 3.0的规范里明确提到一个能赋值给Expressin<TDelegate>类型的lambda表达式的方法体只能是一个表达式,而不能是一个代码块——代码块无法通过LINQ v1里的Expression tree表示。同时也值得注意的是,LINQ Expression tree本质上是一棵静态类型的树——所有节点所表示的类型都能够在编译时确定。

以上是“如何创建LINQ Expression tree节点”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯