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

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

C#語法糖之第六篇: 泛型委托- Predicate<T>、Func<T>

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

C#語法糖之第六篇: 泛型委托- PRedicate<T>、Func<T>

今天繼續(xù)分享泛型委托的Predicate<T>,上篇文章講了Action委托,這個比Action委托功不一樣的地方就是委托引用方法是Bool返回值的方法,Action為無返回值。首先我們看一下它的定義吧:

1 public delegate  bool Predicate<T>(T obj);
View Code

從其定義可以看到,此委托引用一個返回bool 值的方法,在實(shí)際開發(fā)中,通常使用Predicate<T>委托變量引用一個“判斷條件函數(shù)”,在判斷條件函數(shù)內(nèi)部書寫代碼表明函數(shù)參數(shù)所引用的對象應(yīng)滿足的條件,條件滿足時(shí),函數(shù)返回true.

我們在自己實(shí)現(xiàn)一下該委托:

 1 public static class PredicateClass 2  3     { 4  5         public delegate bool PanDuan<T>(T t); 6  7         public static List<T> MyFind<T>(this List<T> tList, PanDuan<T> find) 8  9         {10 11             List<T> newTs = new List<T>();12 13             foreach (T t in tList)14 15             {16 17                 if (find(t))18 19                 {20 21                     newTs.Add(t);22 23                 }24 25             }26 27             return newTs;28 29         }30 31         public static bool 打印學(xué)生信息(Student stu)32 33         {34 35             if (stu.Age > 20) return true;36 37             return false;38 39         }40 41         public static bool 打印教師信息(Teacher teacher)42 43         {44 45             if (teacher.Age > 40 && teacher.TeachNum=="001") return true;46 47             return false;48 49         }50 51     }
View Code

調(diào)用代碼如下:

 1  List<Student> students=new List<Student>(); 2  3             students.Add(new Student{ StuNum = "001",StuName = "zhangsan",Age = 20}); 4  5             students.Add(new Student { StuNum = "002", StuName = "lisi", Age = 21 }); 6  7             students.Add(new Student { StuNum = "003", StuName = "wangwu", Age = 22 }); 8  9             List<Teacher> teacher=new List<Teacher>();10 11             teacher.Add(new Teacher{TeachNum = "004",TeachName = "teacher1",Age = 50});12 13             teacher.Add(new Teacher { TeachNum = "005", TeachName = "teacher2", Age = 51 });14 15             teacher.Add(new Teacher { TeachNum = "006", TeachName = "teacher3", Age = 52 });16 17             Console.WriteLine("原始總數(shù):"+teacher.Count);18 19             List<Teacher> teachers=teacher.MyFind(PredicateClass.打印教師信息);20 21             Console.WriteLine("過濾后總數(shù):"+teachers.Count);22 23             Console.WriteLine("原始總數(shù):" + students.Count);24 25             List<Student> studeList = students.MyFind(PredicateClass.打印學(xué)生信息);26 27             Console.WriteLine("過濾后總數(shù):" + studeList.Count);
View Code

輸出效果:

以上效果可以看出通過自定義泛型委托來判斷和過濾一些信息,最后得到過濾后的數(shù)據(jù)。

以上代碼可以簡化:

 1 //標(biāo)準(zhǔn)寫法 2  3 Console.WriteLine("原始總數(shù):" + teacher.Count); 4  5             List<Teacher> teachers = teacher.MyFind( 6  7                 new PredicateClass.PanDuan<Teacher>(delegate(Teacher t) 8  9                 {10 11                     if (t.Age>21&&t.TeachNum=="001")12 13                     {14 15                         return true;16 17                     }18 19                     return false;20 21                 }));22 23             Console.WriteLine("過濾后總數(shù):" + teachers.Count);24 25 //匿名方法26 27             Console.WriteLine("原始總數(shù):" + teacher.Count);28 29             List<Teacher> teachers1 = teacher.MyFind(30 31                delegate(Teacher t)32 33                 {34 35                     if (t.Age > 21 && t.TeachNum == "001")36 37                     {38 39                         return true;40 41                     }42 43                     return false;44 45                 });46 47             Console.WriteLine("過濾后總數(shù):" + teachers.Count);48 49 //Lambda表達(dá)式50 51             Console.WriteLine("原始總數(shù):" + teacher.Count);52 53             List<Teacher> teachers2 = teacher.MyFind(54 55                u=>56 57                {58 59                    if (u.Age > 21 && u.TeachNum == "001")60 61                    {62 63                        return true;64 65                    }66 67                    return false;68 69                });70 71             Console.WriteLine("過濾后總數(shù):" + teachers.Count);
View Code

輸出結(jié)果:

QQhm0EIDRmTASYwEqZEgNZJkBorMQJUbaQoTTWGiK010lZmhMjPUVobGSldb6WoLTW2hqcw0lZmmMtGUJqrSRFOaaCrTq5NmmmrjAVSliaowUeRGitxEkZsoinWM68dk+d/AuA5JZiTKjESpgSCZIUhmCOJpvHgaJ57Giafx4mm8ZHpdlniJYZ0NpYnfgNs4ML7624gRG9FiA1pkQAqmkfwpOG8Sxp2AcSeg3AlIywR0/YA7AeVOQriTEO4kuGWDxuaJhuaJhuYJEGcCxJ6oZ48DWeNA5jiQOQZgjgGaRmuaRmvoozX00WraSBVtpJI2UkkbqaAOV1CHyynDZZThcvJwOWW0nDJaTh0tp45WUMfKaWPl1LFy6lgZdbyMOl5KHSuljJVSxkrIGxSTR4vJo0Wk0SLSaBFxtHAdwmghYbSAMFpAGCkgjOS/Bv8K3HA+bjjvLXKx3yXnHYb+QbJ/Aob/l/9pcv7fIwsznIEeSkcNpSIHk+GDidD++HUP1fU+APaG1W5IyL9c51f2ykAl/wMG+usS8v7bEir/WxJ67aF1Ca176LWEXhvo+xKKrPsBCT1s2JBQPLg//rWEip2vJDSQAh94BB9IRayzYaB1Cb020BsJ4b4roVzscH2zsVne5x2aop9YEmpNQq1RqDWKOt8g1pneRvIKO+vCVyDaYC25D0juB5L6ACQ9gNBTi++uwepqMF21uJ5afE8tQQ8g9QEpg3X0ERBzrIE1AWZPQjiT0JZpOHcawZtBCmYwohm8xECQGkkyE1VhpinNDJwpsWViqc3sVgun1dLcZmlutza3W5s7bOtw2q2cdiu7zcJus7BaLSyNmakxsTRmVqtl/SS7zcJus7LbrOsPYGpMTeq/juoHYKiMr6ErjXSlkaYw0hQGqnyGIp+hyK

上一篇:C#:字段與屬性

下一篇:C#筆記

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇远县| 屯昌县| 益阳市| 辽宁省| 灌云县| 民和| 阿巴嘎旗| 牟定县| 丽水市| 邵武市| 三江| 武山县| 闻喜县| 石棉县| 彭州市| 南召县| 鄂温| 荥阳市| 正镶白旗| 盐边县| 玛曲县| 安丘市| 措勤县| 太仆寺旗| 无为县| 中山市| 灵宝市| 驻马店市| 永安市| 曲沃县| 安达市| 时尚| 博罗县| 永顺县| 忻州市| 库尔勒市| 定日县| 永宁县| 乡宁县| 淮安市| 安徽省|