• 了解.NET Framework中自带的泛型委托Predicate和Comparison


    Predicate表示定义一组条件并确定指定对象是否符合这些条件的方法。Comparison表示比较同一类型的两个对象的方法。本文主要介绍.NET Framework中自带的泛型委托Predicate和Comparison的使用。

    1、Predicate

    Predicate 相当于 FuncAction类似的委托。表示定义一组条件并确定指定对象是否符合这些条件的方法。Predicate委托通常由 Array 和 List 类的几种方法使用,常用于在集合中搜索元素。

    .NET Framework中的定义如下,

    public delegate bool Predicate(T obj)

    例如,

    1. using System;
    2. using System.Reflection;
    3. using System.Collections.Generic;
    4. namespace Predicate
    5. {
    6. public struct Point
    7. {
    8. public Point(int x,int y)
    9. {
    10. this.X = x;
    11. this.Y = y;
    12. }
    13. public int X { get;set;}
    14. public int Y { get;set;}
    15. }
    16. class Program
    17. {
    18. static void Main(string[] args)
    19. {
    20. Point[] points =
    21. {
    22. new Point(100,200),
    23. new Point(150,250),
    24. new Point(250,375),
    25. new Point(275,390),
    26. new Point(296,400)
    27. };
    28. Predicate predicate = FindPoints;
    29. Point first1 = Array.Find(points, predicate);
    30. Console.WriteLine("使用FindPoints:");
    31. Console.WriteLine($"Found:X={first1.X},Y={first1.Y}");
    32. Point first2 = Array.Find(points, ptn => ptn.X * ptn.Y > 100000);
    33. Console.WriteLine("使用Lambda:");
    34. Console.WriteLine($"Found:X={first2.X},Y={first2.Y}");
    35. Console.ReadKey();
    36. }
    37. private static bool FindPoints(Point ptn)
    38. {
    39. return ptn.X * ptn.Y > 100000;
    40. }
    41. }
    42. }

     

    2、Comparison

    Comparison委托由 Array 类的 Sort(T[], Comparison)方法重载和 List 类的 Sort(Comparison) 方法重载使用,用于对数组或列表中的元素进行排序。

    .NET Framework中的定义如下,

    public delegate int Comparison(T x, T y)

    例如,

    1. using System;
    2. class ListSort
    3. {
    4. static void Main()
    5. {
    6. int[] nums = {3,6,8,1,2,9};
    7. //使用匿名方法实现 Comparison
    8. Array.Sort(nums , delegate(int i,int j){
    9. if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序
    10. { // 这里是倒序排列
    11. return 0; //相等 返回 0
    12. }
    13. else if (i < j)
    14. {
    15. return 1;
    16. }
    17. else
    18. return -1;
    19. });
    20. foreach(int i in nums)
    21. Console.Write(i+",");
    22. Console.WriteLine();
    23. nums=new int[] {13,16,18,11,12,19};
    24. //使用lambda实现 Comparison
    25. Array.Sort(nums , (int i,int j)=>{ //使用匿名方法实现 Comparison
    26. if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序
    27. { // 这里是倒序排列
    28. return 0; //相等 返回 0
    29. }
    30. else if (i < j)
    31. {
    32. return 1;
    33. }
    34. else
    35. return -1;
    36. });
    37. foreach(int i in nums)
    38. Console.Write(i+",");
    39. Console.WriteLine();
    40. nums=new int[] {23,26,28,21,22,29};
    41. //使用定义方法实现 Comparison
    42. Array.Sort(nums , CompareValue);
    43. #region output
    44. foreach(int i in nums)
    45. Console.Write(i+",");
    46. Console.WriteLine();
    47. #endregion
    48. }
    49. private static int CompareValue(int i,int j)
    50. {
    51. if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序
    52. { // 这里是倒序排列
    53. return 0; //相等 返回 0
    54. }
    55. else if (i < j)
    56. {
    57. return 1;
    58. }
    59. else
    60. return -1;
    61. }
    62. }

     

  • 相关阅读:
    JAVA 7-3 统计投票
    什么是Python选择结构
    MySQL中like关键字与索引的使用
    9、Linux 高并发Web服务器
    MapStruct类型之间映射的实现
    操作系统知识点
    LCR 146.螺旋遍历数组
    解决 filezilla 连接服务器失败问题
    [工业互联-1]:工业互联全局概述
    非零基础自学Java (老师:韩顺平) 第2章 Java概述 2.18 Java代码规范 && 2.19 DOS命令
  • 原文地址:https://blog.csdn.net/lwf3115841/article/details/134223693