真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c#中怎么實(shí)現(xiàn)表達(dá)式樹(shù)實(shí)驗(yàn)

c# 中怎么實(shí)現(xiàn)表達(dá)式樹(shù)實(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á)式樹(shù),看上去很相似。對(duì)于委托我們能控制執(zhí)行,但內(nèi)部代碼在程序運(yùn)行中是無(wú)法得知的,而表達(dá)式樹(shù)剛好相反,表達(dá)式樹(shù)是一種數(shù)據(jù)結(jié)構(gòu),可以獲取內(nèi)部細(xì)節(jié)。
            //上面xpression中是使用Lambda為表達(dá)式樹(shù)賦值,還可以:
            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ù)中的參數(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
            //以目錄樹(shù)的形式將強(qiáng)類型 lambda表達(dá)式 表示為數(shù)據(jù)結(jié)構(gòu)
            //其中二個(gè)函數(shù)很有意思:
            //public TDelegate Compile();將表達(dá)式樹(shù)描述的lambda表達(dá)式編譯為可執(zhí)行代碼并生成表示該lambda表達(dá)式的委托
            //public TDelegate Compile(DebugInfoGernerator debugInfoGenerator)帶調(diào)試信息生成器
            //Expression> expressionD = Expression.Lambda(binaryExpression, parameterExpressionA, parameterExpressionB); //如果沒(méi)有泛型指定類型則顯示轉(zhuǎn)換錯(cuò)誤
            Expression> expressionD = Expression.Lambda>(binaryExpression, parameterExpressionA, parameterExpressionB); 
            //也就是說(shuō)最開(kāi)始的Expression> expression = (a,b) => a + b;其實(shí)就是上面的expressionD
            //Expression類是一個(gè)抽象類,表示表達(dá)式目錄樹(shù)節(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á)式樹(shù)
            //Expression> rcexp = 感覺(jué)是不是要定義一個(gè)int int到RefClas對(duì)象的操作才能變成Lambad表達(dá)式樹(shù)??????? 
            //比如ExpressionType等于ExpressionType.Convert的表達(dá)式操作 Convert強(qiáng)制轉(zhuǎn)換或轉(zhuǎn)換運(yùn)算,如(SampleType)obj;對(duì)于數(shù)值轉(zhuǎn)換,超范圍轉(zhuǎn)換也不會(huì)引發(fā)異常。具體如何寫(xiě)代碼???

            //Lambda方法和通過(guò)API創(chuàng)建方法,共二種創(chuàng)建表達(dá)式樹(shù)
            //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ù)實(shí)驗(yàn)問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


網(wǎng)站名稱:c#中怎么實(shí)現(xiàn)表達(dá)式樹(shù)實(shí)驗(yàn)
分享路徑:http://weahome.cn/article/poepep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部