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

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

表達(dá)式:使用API創(chuàng)建表達(dá)式樹(6)

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

表達(dá)式:使用API創(chuàng)建表達(dá)式樹(6)

一、ConstantExPRession:表示具有常量值的表達(dá)式。因為表達(dá)式應(yīng)用過程中,參數(shù)據(jù)多是 Expressions 類型,算是對常量值的一種包裝吧。  ConstantExpression使用比較簡單,如Expression constantExpr = Expression.Constant(100);二、MemberExpression:表示訪問字段或?qū)傩浴O鄬碚f也是一個比較簡單的表達(dá)式了,主要是對 字段或?qū)傩?的包裝

using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expressions;namespace Consoleapplication2{    class Program    {        class MyUser        {            public string Name;            public int Age { get; set; }        }        static void Main(string[] args)        {            MyUser user = new MyUser { Name = "馬七", Age = 20 };            #region  字段實(shí)例調(diào)用            Console.WriteLine("當(dāng)前用戶 姓名:{0} 年齡 {1} 歲", user.Name, user.Age);            MemberExpression mbExp = Expression.Field(Expression.Constant(user), "Name");            Console.WriteLine(mbExp.ToString());            Console.WriteLine(Expression.Lambda(mbExp).Compile().DynamicInvoke());        #endregion            //以上輸出            //value(ConsoleApplication2.Program+MyUser).Name            //馬七            #region  Lambda表達(dá)式            List<MyUser> users = new List<MyUser>();            users.Add(new MyUser { Name = "張三", Age = 20 });            users.Add(new MyUser { Name = "李四", Age = 23 });            users.Add(new MyUser { Name = "王五", Age = 36 });            users.Add(new MyUser { Name = "劉六", Age = 41 });            user = users.Where(s => s.Name == "張三").FirstOrDefault();            Console.WriteLine("當(dāng)前用戶 姓名:{0} 年齡 {1} 歲", user.Name, user.Age);        #endregion            //以上輸出            //當(dāng)前用戶 姓名:張三 年齡 20 歲            //**********************************            //組合如  s => s.Name == "張三"  的表達(dá)式            //**********************************            #region  Lambda表達(dá)式 使用字段            ParameterExpression paramExpr = Expression.Parameter(typeof(MyUser), "o");            MemberExpression namePropExpr = Expression.Field(paramExpr, "Name");  //字段            BinaryExpression binExp = Expression.Equal(namePropExpr, Expression.Constant("李四"));            LambdaExpression laExp = Expression.Lambda(binExp, paramExpr);            Func<MyUser, bool> func = (Func<MyUser, bool>)laExp.Compile();            user = users.Where(func).FirstOrDefault();            Console.WriteLine(binExp.ToString());            Console.WriteLine(laExp.ToString());            Console.WriteLine("當(dāng)前用戶 姓名:{0} 年齡 {1} 歲", user.Name, user.Age);            #endregion            //以上輸出            //(o.Name == "李四")            //o => (o.Name == "李四")            //當(dāng)前用戶 姓名:李四 年齡 23 歲            #region  Lambda表達(dá)式 使用屬性            namePropExpr = Expression.Property(paramExpr, "Age");            binExp = Expression.Equal(namePropExpr, Expression.Constant(36));            laExp = Expression.Lambda(binExp, paramExpr);            func = (Func<MyUser, bool>)laExp.Compile();            user = users.Where(func).FirstOrDefault();            Console.WriteLine(binExp.ToString());            Console.WriteLine(laExp.ToString());            Console.WriteLine("當(dāng)前用戶 姓名:{0} 年齡 {1} 歲", user.Name, user.Age);            #endregion            //以上輸出            //(o.Age == 36)            //o => (o.Age == 36)            //當(dāng)前用戶 姓名:王五 年齡 36 歲            Console.ReadLine();        }    }}
View Code

三、NewExpression :表示構(gòu)造函數(shù)調(diào)用。 如果調(diào)用的類是實(shí)例類,這個就非常有用,特別是在調(diào)用方法表達(dá)式時,MethodCallExpression的第一個參數(shù)如果是實(shí)例類,這要用NewExpression來創(chuàng)建一個實(shí)例對象調(diào)用其方法,靜態(tài)類時,用null。使用時, 用Expression.New(類型)就可以創(chuàng)建了。

四、MethodCallExpression:表示對靜態(tài)方法或?qū)嵗椒ǖ恼{(diào)用。 這個用是比較多,也在這系列中用的多,就不單獨(dú)舉例。

五、UnaryExpression :表示包含一元運(yùn)算符的表達(dá)式。如:

     // -100            UnaryExpression aiU1 = Expression.Negate(Expression.Constant(100));            Console.WriteLine(aiU1.ToString());            //Not(Ture)            UnaryExpression aiU2 = Expression.Not(Expression.Constant(true));            Console.WriteLine(aiU2.ToString());            //() => 123456            UnaryExpression aiU3 = Expression.Quote(Expression.Lambda( Expression.Constant(123456)));            Console.WriteLine(aiU3.ToString());            //(123456 As Nullable`1)            UnaryExpression aiU4 = Expression.TypeAs(Expression.Constant(123456), typeof(int?));            Console.WriteLine(aiU4.ToString());            //Convert(123456)            UnaryExpression aiU5 = Expression.Convert(Expression.Constant(123456), typeof(Int16));            Console.WriteLine(aiU5.ToString());            //+123456            UnaryExpression aiU6 = Expression.UnaryPlus(Expression.Constant(123456));            Console.WriteLine(aiU6.ToString());
View Code


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 叶城县| 鞍山市| 元氏县| 马关县| 东乡族自治县| 鹤庆县| 措勤县| 上栗县| 通道| 墨竹工卡县| 浪卡子县| 谢通门县| 屯昌县| 得荣县| 年辖:市辖区| 朝阳县| 邳州市| 武夷山市| 调兵山市| 阿克陶县| 湘阴县| 梨树县| 怀化市| 华池县| 晋城| 团风县| 桑植县| 涟源市| 嵊州市| 蒙城县| 纳雍县| 抚州市| 连山| 探索| 威信县| 宁强县| 绥中县| 虎林市| 基隆市| 莆田市| 桓台县|