国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

表達式:使用API創(chuàng)建表達式樹(5)

2019-11-17 03:17:53
字體:
供稿:網(wǎng)友

表達式:使用API創(chuàng)建表達式樹(5)

一、ConditionalExPRession:表達式 生成如 IIF((a == b), "a和b相等", "a與b不相等") 式子。使用:

            ParameterExpression aip1 = Expression.Parameter(typeof(int), "a"); //(1)            ParameterExpression aiP2 = Expression.Parameter(typeof(int), "b");            ParameterExpression aiP3 = Expression.Parameter(typeof(int));            Console.WriteLine(aiP3.ToString());        //輸出:Param_0            BinaryExpression aiBnExp = Expression.MakeBinary(ExpressionType.Equal,                                   aiP1,                                   aiP2);            ConditionalExpression aiCdExp = Expression.Condition(                           aiBnExp,                           Expression.Constant("a和b相等"),                           Expression.Constant("a與b不相等")                         );  //(2)            Console.WriteLine(aiCdExp.ToString());            //輸出:IIF((a == b), "a和b相等", "a與b不相等")            LambdaExpression aiLamExp = Expression.Lambda(                Expression.Block   //(3)                (                   new ParameterExpression[] { aiP1, aiP2 }                   , Expression.Assign(aiP1, Expression.Constant(10))                   , Expression.Assign(aiP2, Expression.Constant(30))                   , aiCdExp                ));            Console.WriteLine(aiLamExp.Compile().DynamicInvoke());            Console.ReadLine();

1、在上面代碼段中的(1)出現(xiàn)的 ParameterExpression 是參數(shù)表達示,使用比較簡單,但很常用,只有兩個構(gòu)造方法,生成出的效果和數(shù)據(jù)式子中的未知數(shù)是一個意思,是一個變量的占位符。2、ConditionalExpression:構(gòu)建也是容易的, 如果第一個參數(shù)的計算結(jié)果為 true,則執(zhí)行第二個參數(shù);否則執(zhí)行第三個參數(shù)。3、在這個代碼(3)中,使用了BlockExpression表達示,在前面已經(jīng)對他的使用有介紹,這里演示的是,如何通過BlockExpression來生成ParameterExpression的賦值,并將值傳入使用該參數(shù)的表達式中。(3)的表達式視圖為 .Lambda #Lambda1<System.Func`1[System.String]>() { .Block( System.Int32 $a, System.Int32 $b) { $a = 10; $b = 30; .If ($a == $b) { "a和b相等" } .Else { "a與b不想等" } } } 因此,如果有參數(shù)賦值時,順序是:1)、參數(shù)聲明 ;2)、參數(shù)賦值;3)、使用此參數(shù)(列表)的表達示;

二、SwitchExpression:表示一個控制表達式,該表達式通過將控制傳遞到 SwitchCase 來處理多重選擇。

        //構(gòu)建類似下列代碼的表達式            //int i = 1;            //switch (i)            //{            //    case 1:            //        Console.WriteLine("一等獎");            //        break;            //    case 2:            //        Console.WriteLine("二等獎");            //        break;            //    case 3:            //        Console.WriteLine("三等獎");            //        break;            //    default:            //        Console.WriteLine("鼓勵獎");            //        break;            //}            //聲明 SwitchCase 的稱值參數(shù),相當(dāng)于 switch (i)            ParameterExpression aiSwvP = Expression.Parameter(typeof(int), "i");            //構(gòu)造            SwitchExpression aiSwvExp = Expression.Switch(                aiSwvP   // switch (i)                , Expression.Call(                    null,                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),                    Expression.Constant("鼓勵獎")                )  //default 默認事例,此參數(shù)沒有代碼無默認事例                , new SwitchCase[] {  //事例 之一,前部分是執(zhí)行,后部分是合符條件值(與)                   Expression.SwitchCase(  Expression.Call(                    null,                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),                    Expression.Constant("一等獎") )                , Expression.Constant(1)   //case 1            )            ,Expression.SwitchCase(                Expression.Call(                    null,                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),                    Expression.Constant("二等獎")  ),                Expression.Constant(2)  //case 2            )            ,Expression.SwitchCase(                Expression.Call(                    null,                    typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) }),                    Expression.Constant("三等獎")  )                    ,Expression.Constant(3) //case 3                             )                               });            // The following statement first creates an expression tree,            // then compiles it, and then runs it.            Expression.Lambda<Action>(switchExpr).Compile()();            Expression.Lambda<Action<int>>(aiSwvExp, aiSwvP).Compile().DynamicInvoke(2);

輸出:    二等獎


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高邑县| 镇江市| 莱芜市| 汪清县| 黄龙县| 宿迁市| 衡水市| 全椒县| 阳山县| 司法| 卢氏县| 峨边| 商都县| 明水县| 平舆县| 韶关市| 柳州市| 铜川市| 林周县| 文昌市| 石渠县| 巴青县| 宁晋县| 六枝特区| 石城县| 霍山县| 留坝县| 乌拉特后旗| 玛多县| 寿宁县| 河源市| 子长县| 突泉县| 新和县| 武安市| 马关县| 怀仁县| 延安市| 高邑县| 翁牛特旗| 杭锦后旗|