日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
c#中怎么實(shí)現(xiàn)表達(dá)式樹實(shí)驗(yàn)

c# 中怎么實(shí)現(xiàn)表達(dá)式樹實(shí)驗(yàn),針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

10多年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)VR全景等多個(gè)行業(yè),擁有豐富的營(yíng)銷推廣經(jīng)驗(yàn)。

Func myfunc = (a, b) => a + b;
            Expression> expression = (a, b) => a * b;

            Console.WriteLine(myfunc(3, 4));
            //Console.WriteLine(expression(5, 6));//expression是變量,但此處當(dāng)作方法
            //上面分別表示Func委托和表達(dá)式樹,看上去很相似。對(duì)于委托我們能控制執(zhí)行,但內(nèi)部代碼在程序運(yùn)行中是無(wú)法得知的,而表達(dá)式樹剛好相反,表達(dá)式樹是一種數(shù)據(jù)結(jié)構(gòu),可以獲取內(nèi)部細(xì)節(jié)。
            //上面xpression中是使用Lambda為表達(dá)式樹賦值,還可以:
            ParameterExpression parameterExpressionA = Expression.Parameter(typeof(int),"a");
            //expression.Parameter(typeof(int), "a");//什么意思???
             //public static ParameterExpression Expression.Parameter(Type pyte,string name); //創(chuàng)建一個(gè)Expresions.ParameterExpression節(jié)點(diǎn),該節(jié)點(diǎn)可用于標(biāo)識(shí)樹中的參數(shù)或變量
            //返回值Expressions.ParameterExpression,其Expressions.Expression.NodeType屬性等于Expressions.ExpressionType.Parameter,并且其Expressions.Expression.Type和Expressions.ParameterExpression.Name屬性設(shè)置為指定值
            ParameterExpression parameterExpressionB = Expression.Parameter(typeof(int), "b");
            BinaryExpression binaryExpression = Expression.Add(parameterExpressionA, parameterExpressionB);
            //BinaryExpression包含二元運(yùn)算符的表達(dá)式
            //public sealed class Expression:LambdaExpression
            //以目錄樹的形式將強(qiáng)類型 lambda表達(dá)式 表示為數(shù)據(jù)結(jié)構(gòu)
            //其中二個(gè)函數(shù)很有意思:
            //public TDelegate Compile();將表達(dá)式樹描述的lambda表達(dá)式編譯為可執(zhí)行代碼并生成表示該lambda表達(dá)式的委托
            //public TDelegate Compile(DebugInfoGernerator debugInfoGenerator)帶調(diào)試信息生成器
            //Expression> expressionD = Expression.Lambda(binaryExpression, parameterExpressionA, parameterExpressionB); //如果沒有泛型指定類型則顯示轉(zhuǎn)換錯(cuò)誤
            Expression> expressionD = Expression.Lambda>(binaryExpression, parameterExpressionA, parameterExpressionB); 
            //也就是說(shuō)最開始的Expression> expression = (a,b) => a + b;其實(shí)就是上面的expressionD
            //Expression類是一個(gè)抽象類,表示表達(dá)式目錄樹節(jié)點(diǎn)的類派生自該基類,它還包含用來(lái)創(chuàng)建各種節(jié)點(diǎn)類型的靜態(tài)工廠方法。
            //Expression類有很多子類,比如LambdaExpression,BinaryExpression,ParameterExpression,ConstantExpression,ConditionExpression,GotoExpression,LabelExpression等
            //其中LambdaExpression類中:
            //public Expression Body{get;}獲取Lambda表達(dá)式的主體
            //public string name{get;}獲取Lambda表達(dá)式的名稱
            //public overrid sealed ExpressionType NodeType{get;}返回此Expression的節(jié)點(diǎn)類型 注意這種語(yǔ)法格式:因?yàn)樵诟割怑xpression中public virtual ExpressionType NodeType{get;}
            //也就是說(shuō)在C#中父類virtual一個(gè)方法或?qū)傩苑椒ㄖ?,在子類中?duì)這個(gè)方法或?qū)傩苑椒梢詏verride,再如果加上sealed則表示不允許修改了
            //public ReadOnlyCollection Parameters{get;}獲取Lambda表達(dá)式的參數(shù)
            //pulbic Type ReturnType{get;} 返回值類型
            //pubilc override sealed Type[get;}獲取此Expression所表示的表達(dá)式的靜態(tài)類型
            Console.WriteLine(expression.Body.ToString()); //(a * b)
            Console.WriteLine(expression.NodeType.ToString());//Lambda
            Console.WriteLine(parameterExpressionA.NodeType.ToString() + "----" + parameterExpressionA.Type.BaseType.ToString());//Parameter----System.ValueType

            //除了System.ValueType,是不是還有引用類型??
            //Expression> rcexp = (a,b)=>{return new RefClas(a,b);}//無(wú)法將具有語(yǔ)句體的Lambda表達(dá)式轉(zhuǎn)換為L(zhǎng)ambda表達(dá)式樹
            //Expression> rcexp = 感覺是不是要定義一個(gè)int int到RefClas對(duì)象的操作才能變成Lambad表達(dá)式樹??????? 
            //比如ExpressionType等于ExpressionType.Convert的表達(dá)式操作 Convert強(qiáng)制轉(zhuǎn)換或轉(zhuǎn)換運(yùn)算,如(SampleType)obj;對(duì)于數(shù)值轉(zhuǎn)換,超范圍轉(zhuǎn)換也不會(huì)引發(fā)異常。具體如何寫代碼???

            //Lambda方法和通過(guò)API創(chuàng)建方法,共二種創(chuàng)建表達(dá)式樹
            //API方法:
            ParameterExpression numParameterExpression = Expression.Parameter(typeof(int), "num");
            ConstantExpression five = Expression.Constant(5, typeof(int));
            BinaryExpression numLessThanFive = Expression.LessThan(numParameterExpression, five);
            Expression> lambda = Expression.Lambda>(numLessThanFive, numParameterExpression);
            Console.WriteLine("lambda的內(nèi)容:{0}", lambda.ToString());//lambda的內(nèi)容:num => (num < 5)
            //表達(dá)式的編譯
            var func = lambda.Compile();
            Console.WriteLine("lambda的運(yùn)行結(jié)果=" + func(6));

關(guān)于c# 中怎么實(shí)現(xiàn)表達(dá)式樹實(shí)驗(yàn)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


分享標(biāo)題:c#中怎么實(shí)現(xiàn)表達(dá)式樹實(shí)驗(yàn)
文章源于:http://www.dlmjj.cn/article/poepep.html