C#委托基础6——泛型委托Predicate

简介:

 

C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

 

此委托返回一个bool值,该委托通常引用一个"判断条件函数"。需要指出的是,判断条件一般为“外部的硬性条件”,比如“大于50”,而不是由数据自身指定,不如“查找数组中最大的元素就不适合”。

 

例一

class Program
{
        bool IsGreaterThan50(int i)
        {
            if (i > 50)
                return true;
            else
                return false;
        }

        static void Main(string[] args)
        {
            Program p=new Program();

            List<int> lstInt = new List<int>();
            lstInt.Add(50);
            lstInt.Add(80);
            lstInt.Add(90);

            Predicate<int> pred = p.IsGreaterThan50;
           
            int i = lstInt.Find(pred);                         // 找到匹配的第一个元素,此处为80
            Console.WriteLine("大于50的第一个元素为{0}",i);

           

            List<int> all = lstInt.FindAll(pred);
            for (int j = 0; j < all.Count(); j++)
            {
                Console.WriteLine("大于50的数组中元素为{0}", all[j]);  // 找出所有匹配条件的
            }

            Console.ReadLine();
        }
}

例二

class Staff
{
        private double salary;

        public double Salary
        {
            get { return salary; }
            set { salary = value; }
        }

        private string num;

        public string Num
        {
            get { return num; }
            set { num = value; }
        }

        public override string ToString()
        {
            return "Num......" + num + "......" + "......" + "Salary......" + salary;
        }
}

 

class Program
{
        bool IsSalaryGreaterThan5000(Staff s)
        {
            if (s.Salary > 5000)
                return true;
            else
                return false;
        }

        static void Main(string[] args)
        {
            Program p = new Program();

            List<Staff> allStaff = new List<Staff>
            {
                new Staff{Num="001",Salary=9999.9},
                new Staff{Num="002",Salary=8991},
                new Staff{Num="003",Salary=10000.8},
                new Staff{Num="004",Salary=4999.99}
            };

            Predicate<Staff> s = p.IsSalaryGreaterThan5000;
            Staff theFirstOne = allStaff.Find(s);
            Console.WriteLine(theFirstOne);              // 找出第一个

            List<Staff> all = allStaff.FindAll(s);
            for (int i = 0; i < all.Count(); i++)
            {
                Console.WriteLine(all[i]);              // 找出所有满足条件的
            }

            Console.ReadLine();
        }
}


本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容
目录
相关文章
|
云安全 存储 供应链
云上快报 | 阿里云混合云再攀新高 斩获信通院2项大奖 高分通过电子四院云基准评测获引领级
随着企业数字化转型进程推进,各行业企业在数字基础设施一体化云平台、研运数字化治理、客户服务、人力资源、供应链等业务单元对数字化产品平台以及相关服务商数字化服务能力的需求逐渐明晰,如何选择可信的数字化服务成为企业推进自身数字化工作的关键。近日,阿里云混合云凭借业界领先的能力,屡获多个国家权威级机构的认证和大奖:高分通过电子四院云基准评测获引领级、混合云解决方案顺利通过可信云【混合云安全能力要求】增强级(最高级)认证、全国首批通过数字化可信服务评估的企业等,成为政企数字化转型的首选技术基础设施。
4231 0
云上快报 | 阿里云混合云再攀新高 斩获信通院2项大奖 高分通过电子四院云基准评测获引领级
|
测试技术 Linux API
mutagen-处理音频元数据的Python模块
Mutagen是处理音频元数据的Python模块。它支持ASF,FLAC,MP4,Monkey's Audio,MP3,Musepack,Ogg Opus,Ogg FLAC,Ogg Speex,Ogg Theora,Ogg Vorbis,True Audio,WavPack,OptimFROG和AIFF音频文件。支持所有版本的ID3v2,并解析所有标准的ID3v2.4帧。它可以读取Xing标头,以准确计算MP3的比特率和长度。无论音频格式如何,都可以编辑ID3和APEv2标签。它还可以在单个数据包/页面级别上处理Ogg流。
2743 0
mutagen-处理音频元数据的Python模块
|
人工智能 Cloud Native 数据挖掘
|
存储 前端开发 编译器
智能合约与DApp的关系与区别
以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App,简称DApp)。
智能合约与DApp的关系与区别
|
弹性计算 运维 容灾
从人工到自动,泛微云上自动化部署实践
泛微借助阿里云的底层优势,将部分客户的服务迁移到云上,从硬件和网络上保证用户能够高效访问 OA 系统
从人工到自动,泛微云上自动化部署实践
|
XML Java Android开发
Unity与 SO 交互 ☀️| 详细讲解 怎样通过 Android Studio 生成一个.so文件 并简单调用!
📢前言 🎬SO文件生成 🍺通过Android Studio生成.so文件 🏳️‍🌈第一步:下载配置好NDK 🏳️‍🌈第二步:新建一个AS工程,新建一个JniTest.java文件 🏳️‍🌈第三步:选中JniTest.java文件,进行Make Project 🏳️‍🌈第四步:新建一个jni文件夹,生成.h头文件 🏳️‍🌈第五步:新建 一个c/c++source file文件test.c 和 Android.mk、Application.mk文件 🏳️‍🌈第六步:关联下载好的NDK包 🏳️‍🌈第七步:简单在AS端调用一下 💬总结
Unity与 SO 交互 ☀️| 详细讲解 怎样通过 Android Studio 生成一个.so文件 并简单调用!
|
前端开发 JavaScript 关系型数据库
MacOs M1 芯片分布式搭建 Nginx+PHP+MySQL和多站点域名访问
一、安装Nginx 问题:Mac 在安装nginx之前记得把原本的apache2给卸载删除了,要不然后期会出现端口号被占用,或者有时候nginx用不了
|
安全 网络安全 云计算
阿里云认证考试报名方法! 阿里云认证考试真题解析。
云计算云服务属于高新技术领域的一种重要方向,国内各大互联网公司都投入大量人力和物力参与其建设,因此它也为从业者提供了良好的发展前途以及丰厚的物质报酬。但是需要指出的是,该领域有较高门槛,考取资格证书是第一步,目前国内主流的有阿里云认证、腾讯云认证和华为云认证,今天就介绍阿里云认证报名方法和须知,并分享认证考试真题以及解析。
709 0
阿里云认证考试报名方法! 阿里云认证考试真题解析。
|
监控 供应链 搜索推荐
案例酷丨欧诗漫:日化行业与工业互联网的珠联璧合
日化行业是市场竞争最为激烈的行业之一,面对消费者和市场不断升级的要求,如何灵活应对数字经济时代的挑战和变化?欧诗漫携手阿里巴巴,利用区块链技术,通过建设工业互联网日化行业标识解析系统,在产品质量控制溯源、生产协同、渠道营销等方面做出全方位的提升。
案例酷丨欧诗漫:日化行业与工业互联网的珠联璧合
|
弹性计算 运维 安全
什么是裸金属服务器?裸金属服务器、物理机和云服务器区别及优缺点对比
什么是裸金属服务器?裸金属服务器和物理机有有什么区别?裸金属服务器和物理机的区别及优缺点对比: