大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > 委托、Lambda表达式、事件系列02,什么时候该用委托

委托、Lambda表达式、事件系列02,什么时候该用委托

关键词:委托Lambda表达式事件  阅读(740) 赞(52)

[摘要]本文是对委托、Lambda表达式、事件系列02,什么时候该用委托的讲解,对学习C#编程技术有所帮助,与大家分享。

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

        }

    }

可见,当多个方法有重复的部分,且输入类型一致,返回类型一致,就可以考虑使用委托了。



相关评论