假设要找出整型集合中小于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委托

最新文章

  1. nginx反向代理、动静分离
  2. [IR] Information Extraction
  3. cocos2d ARCH_OPTIMAL_PARTICLE_SYSTEM这个未定义的问题
  4. dos界面下执行java文件将错误输出到一个文本小技巧
  5. 使用Node.js和Redis实现push服务--转载
  6. UVa 1210 (高效算法设计) Sum of Consecutive Prime Numbers
  7. 【HDOJ】3029 Scales
  8. Ubuntu 12.04下解决Rhythmbox Music Player乱码问题
  9. 移动平台3G手机网站前端开发布局技巧汇总
  10. POJ1458 Common Subsequence 【最长公共子序列】
  11. Mahout fp-growth
  12. 【翻译】Siesta事件记录器入门
  13. 关于WCF服务 http://XXXXXX/XXX/xxx.svc不支持内容类型 application/sop+xml;charset=utf-8 错误解决方法
  14. Eclipse配置注释模板详细介绍
  15. VMware虚拟机与Windows文件共享
  16. ux.form.field.Year 只能选年的时间扩展
  17. ViewpageMaiActity
  18. springboot @Value 获取计算机中绝对路径文件的内容
  19. 数据结构笔记1_求第k个最大者
  20. 用Git向gitHub上传项目

热门文章

  1. Android BLE设备蓝牙通信框架BluetoothKit
  2. 转:CSS定位属性详解
  3. MySQL问题解决:-bash:mysql:command not found
  4. ajax和jsonp
  5. Storm集群启动流程分析
  6. 1044-Access denied for user &#39;root&#39;@&#39;%&#39; to database &#39;lc_db&#39;
  7. 027 Spark的优化总结
  8. ubuntu18.04 安装mysql不出现设置 root 帐户的密码问题(装)
  9. java okhttp 发送图片
  10. Ubuntu美化及配置,常见问题解决方案