当前位置: 首页 > news >正文

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

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

1、Predicate

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

.NET Framework中的定义如下,

public delegate bool Predicate<in T>(T obj)

例如,

using System;
using System.Reflection;
using System.Collections.Generic;
namespace Predicate
{public struct Point{public Point(int x,int y){this.X = x;this.Y = y;}public int X { get;set;}public int Y { get;set;}}class Program{static void Main(string[] args){Point[] points ={new Point(100,200),new Point(150,250),new Point(250,375),new Point(275,390),new Point(296,400)};Predicate<Point> predicate = FindPoints;Point first1 = Array.Find(points, predicate);Console.WriteLine("使用FindPoints:");Console.WriteLine($"Found:X={first1.X},Y={first1.Y}");Point first2 = Array.Find(points, ptn => ptn.X * ptn.Y > 100000);Console.WriteLine("使用Lambda:");Console.WriteLine($"Found:X={first2.X},Y={first2.Y}");Console.ReadKey();}private static bool FindPoints(Point ptn){return ptn.X * ptn.Y > 100000;}}
}

 

2、Comparison

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

.NET Framework中的定义如下,

public delegate int Comparison<in T>(T x, T y)

例如,

using System;
class ListSort
{static void Main(){int[] nums = {3,6,8,1,2,9}; //使用匿名方法实现 Comparison Array.Sort(nums , delegate(int i,int j){  if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序{                               // 这里是倒序排列return 0;    //相等 返回 0}else if (i < j){return 1;    }elsereturn -1;});foreach(int i in nums)Console.Write(i+",");Console.WriteLine();nums=new int[] {13,16,18,11,12,19}; //使用lambda实现 Comparison Array.Sort(nums , (int i,int j)=>{  //使用匿名方法实现 Comparison if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序{                               // 这里是倒序排列return 0;    //相等 返回 0}else if (i < j){return 1;    }elsereturn -1;});foreach(int i in nums)Console.Write(i+",");Console.WriteLine();nums=new int[] {23,26,28,21,22,29}; //使用定义方法实现 Comparison Array.Sort(nums , CompareValue);#region outputforeach(int i in nums)Console.Write(i+",");Console.WriteLine();#endregion}private static int CompareValue(int i,int j){if (i == j)                       // 这个接口的返回值为 1 0 -1. 用来实现排序{                               // 这里是倒序排列return 0;    //相等 返回 0}else if (i < j){return 1;    }elsereturn -1;}
}

 

相关文章:

  • 华为云运维小结
  • 网络安全深入学习第八课——反向代理(工具:frp)
  • flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer
  • 目标检测中的评价指标
  • 【排序算法】 快速排序(快排)!图解+实现详解!
  • pytorch与cudatoolkit,cudnn对应关系及安装相应的版本
  • Sleep(0)、Sleep(1)、SwitchToThread()
  • Python武器库开发-常用模块之subprocess模块(十九)
  • ES 未分片 导致集群状态飘红
  • python机器学习——决策树
  • Android transform旋转rotate圆角矩形图roundedCorners,Kotlin
  • uniapp中地图定位功能实现的几种方案
  • Technology Strategy Pattern 学习笔记2-Creating the Strategy-World Context
  • 【系统架构设计】架构核心知识:4 系统可靠性分析与设计
  • 华为机试练习题:HJ11 数字颠倒
  • Android Volley源码解析
  • dva中组件的懒加载
  • egg(89)--egg之redis的发布和订阅
  • Java 网络编程(2):UDP 的使用
  • JavaScript设计模式与开发实践系列之策略模式
  • k8s如何管理Pod
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • vue的全局变量和全局拦截请求器
  • 编写高质量JavaScript代码之并发
  • 不上全站https的网站你们就等着被恶心死吧
  • 番外篇1:在Windows环境下安装JDK
  • 高性能JavaScript阅读简记(三)
  • 回顾 Swift 多平台移植进度 #2
  • 盘点那些不知名却常用的 Git 操作
  • 实现简单的正则表达式引擎
  • 使用SAX解析XML
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 一个完整Java Web项目背后的密码
  • 《天龙八部3D》Unity技术方案揭秘
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​queue --- 一个同步的队列类​
  • (02)vite环境变量配置
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)JPA - JQPL 实现增删改查
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net Application的目录
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 药厂业务系统 CPU爆高分析
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ 蓝桥杯Web真题 ]-布局切换
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体