溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何創建LINQ Expression tree節點

發布時間:2021-12-01 16:51:30 來源:億速云 閱讀:223 作者:小新 欄目:編程語言

小編給大家分享一下如何創建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節點”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女