您好,登錄后才能下訂單哦!
小編給大家分享一下如何創(chuàng)建LINQ Expression tree節(jié)點(diǎn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)建LINQ Expression tree節(jié)點(diǎn)
當(dāng)了解LINQ Expression tree的概念后,就可以來討論一下這棵樹里面的節(jié)點(diǎn)該如何創(chuàng)建。LINQ Expression tree節(jié)點(diǎn)一般是通過System.Linq.Expression.Expression這個(gè)類上的工廠方法來創(chuàng)建的。包括以下的一些方法:
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
上述列表中每個(gè)名字其實(shí)對(duì)應(yīng)著一組重載,參數(shù)不同,但返回值的類型是一樣的。這些工廠方法所生成的表達(dá)式的意義應(yīng)該說還是很直觀的,就不特別介紹了。經(jīng)常跟編譯器打交道的話應(yīng)該對(duì)這些名字尤其熟悉。
這些工廠方法對(duì)應(yīng)的類的層次結(jié)構(gòu)是:
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節(jié)點(diǎn)中的類只能用于表現(xiàn)表達(dá)式,而無法表現(xiàn)“更大”的語(yǔ)法結(jié)構(gòu),例如賦值表達(dá)式、一般語(yǔ)句等。這是LINQ v1的一個(gè)重要限制,也是為什么C# 3.0的規(guī)范里明確提到一個(gè)能賦值給Expressin<TDelegate>類型的lambda表達(dá)式的方法體只能是一個(gè)表達(dá)式,而不能是一個(gè)代碼塊——代碼塊無法通過LINQ v1里的Expression tree表示。同時(shí)也值得注意的是,LINQ Expression tree本質(zhì)上是一棵靜態(tài)類型的樹——所有節(jié)點(diǎn)所表示的類型都能夠在編譯時(shí)確定。
以上是“如何創(chuàng)建LINQ Expression tree節(jié)點(diǎn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。