委托、Lambda表达式、事件系列02,什么时候该用委托
2024-10-14 18:55:57
假设要找出整型集合中小于5的数。
static void Main(string[] args){IEnumerable<int> source = new List<int>(){2, 3, 4, 5, 6, 7, 8, 9,10, 11};var result = GetNumbersLessThanFive(source);foreach (int n in result){Console.WriteLine(n);}}static IEnumerable<int> GetNumbersLessThanFive(IEnumerable<int> numbers){foreach (int number in numbers){if (number < 5) yield return number;}}
如果要找出整型集合中小于10的数,可能首先想到的是增加一个方法。
static IEnumerable<int> GetNumbersLessThanTen(IEnumerable<int> numbers){foreach (int number in numbers){if (number < 10) yield return number;}}
其实,GetNumbersLessThanFive方法和GetNumbersLessThanTen方法简直太像了,就if语句不一样。虽然if语句不一样,但逻辑是一样的:输入一个整型数,输出bool类型。这正是委托该登场的时候!
先声明一个委托,接收int类型参数,返回bool值。现在,if语句可以用委托来替代了,因为委托参数列表和返回类型与if语句吻合。
internal delegate bool MyCalculateDelegate(int val);class Program{static void Main(string[] args){IEnumerable<int> source = new List<int>(){2, 3, 4, 5, 6, 7, 8, 9,10, 11};MyCalculateDelegate del = LessThanFive;var result = GetNumbers(source,del);foreach (int n in result){Console.WriteLine(n);}}static IEnumerable<int> GetNumbers(IEnumerable<int> numbers, MyCalculateDelegate del){foreach (int number in numbers){if (del(number)) yield return number;}}static bool LessThanFive(int val){return val < 5;}static bool LessThanTen(int val){return val < 10;}}
可见,当多个方法有重复的部分,且输入类型一致,返回类型一致,就可以考虑使用委托了。
“委托、Lambda表达式、事件系列”包括:
委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
委托、Lambda表达式、事件系列02,什么时候该用委托
委托、Lambda表达式、事件系列03,从委托到Lamda表达式
委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托、Lambda表达式、事件系列05,Action委托与闭包
委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
委托、Lambda表达式、事件系列07,使用EventHandler委托
最新文章
- nginx反向代理、动静分离
- [IR] Information Extraction
- cocos2d ARCH_OPTIMAL_PARTICLE_SYSTEM这个未定义的问题
- dos界面下执行java文件将错误输出到一个文本小技巧
- 使用Node.js和Redis实现push服务--转载
- UVa 1210 (高效算法设计) Sum of Consecutive Prime Numbers
- 【HDOJ】3029 Scales
- Ubuntu 12.04下解决Rhythmbox Music Player乱码问题
- 移动平台3G手机网站前端开发布局技巧汇总
- POJ1458 Common Subsequence 【最长公共子序列】
- Mahout fp-growth
- 【翻译】Siesta事件记录器入门
- 关于WCF服务 http://XXXXXX/XXX/xxx.svc不支持内容类型 application/sop+xml;charset=utf-8 错误解决方法
- Eclipse配置注释模板详细介绍
- VMware虚拟机与Windows文件共享
- ux.form.field.Year 只能选年的时间扩展
- ViewpageMaiActity
- springboot @Value 获取计算机中绝对路径文件的内容
- 数据结构笔记1_求第k个最大者
- 用Git向gitHub上传项目
热门文章
- Android BLE设备蓝牙通信框架BluetoothKit
- 转:CSS定位属性详解
- MySQL问题解决:-bash:mysql:command not found
- ajax和jsonp
- Storm集群启动流程分析
- 1044-Access denied for user &#39;root&#39;@&#39;%&#39; to database &#39;lc_db&#39;
- 027 Spark的优化总结
- ubuntu18.04 安装mysql不出现设置 root 帐户的密码问题(装)
- java okhttp 发送图片
- Ubuntu美化及配置,常见问题解决方案