C# 委托(超级无敌简单,人人都可以看懂)最大值和最小值的方法

到底什么是委托
来写一个返回最大值的方法。
方法一:

 static int Max(List<int> nums)
        {
            int max = nums[0];
            foreach (var num in nums)
            {
                if (num > max)
                {
                    max = num;
                }
            }

            return max;
        }
 Console.WriteLine("最大值是:"+Max(new List<int> { 1, 2, 3, 4, 5 }));

在这里插入图片描述
用枚举返回最小值或最小值

  /*获取最大值最小值*/
        enum mmnum { 
          max,
          min
         }  
        static int Max(List<int> nums, mmnum retype)
        {
            int max = nums[0];
            
            foreach (var num in nums)
            {
                switch (retype)
                {
                    case mmnum.max:
                        if (num > max)
                        {
                            max = num;
                        }
                        break;
                    case mmnum.min:
                        if (num < max)
                        {
                            max = num;
                        }
                        break;
                    default:
                        break;
                }
                
            }

            return max;
        }
        Console.WriteLine("最小值是:" + Max(new List<int> { 1, 2, 3, 4, 5 }, mmnum.min));

在这里插入图片描述
代码封闭
封装编号

遍历List>=10的元素

  static List<int> Traverse(List<int> nums) {
               List<int> list = new List<int>();   
               foreach (var num in nums)
               {
                   if (num>=10)   //num%2 num>=10
                   {
                       list.Add(num);
                   }
               }
               return list;
           }
           var list=Traverse(new List<int> {10,2,4,33 });
            foreach (var item in list)
            {
                Console.WriteLine("大于10的值有:"+item);
            }

在这里插入图片描述
再增加一个功能,遍历一个偶数(num%2==0)
问题一:
无法封装住变化点
引入委托,也叫匿名做匿名方法
声明委托类型
修改形参列表
传入委托

 delegate bool Function(int num); //声明了一个function的委托带有num类型返回bool类型
       static Function GreatThen10 = delegate (int n) { return n >= 10; };
       static Function IsEven = delegate (int n) { return n % 2 == 0; }; 
        static List<int> Traverse(List<int> nums, Function function)
        {
            List<int> list = new List<int>();
            foreach (var num in nums)
            {
                if (function(num))   //num%2 num>=10
                {
                    list.Add(num);
                }
            }
            return list;
        }
         var list= Traverse(new List<int>() {1,2,3,4,5,6 }, IsEven);
        foreach (var item in list)
         {
                Console.WriteLine(item);
         }

在这里插入图片描述

Lambda 表达式(对委托的语法简写)

语句lambda
表达式lambda
在这里插入图片描述

 var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, delegate (int n) { return n >= 10; }); //语句lambda 
            var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, (int n) => { return n >= 10; }); //语句lambda (type var,...)=>{......}
            var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, (n) => { return n >= 10; }); //语句lambda (var,...)=>{......}
            var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6 }, n => { return n >= 10; }); //语句lambda var=>{......}
            var list = Traverse(new List<int>() { 1, 2, 3, 4, 5, 6, 10 }, n => n >= 10); //语句lambda {}=>{......}

系统自带一些泛型委托
在这里插入图片描述

        var li = new List<int>() { 1, 2, 3, 4, 5, 6, 10 };
            li.ForEach(i=>Console.WriteLine(i));
            li.Find(n=>n>2 );
            li.Sum(n=> { if (n <= 0) return 0; else return n; });
            Console.WriteLine(li.Sum(n => { if (n <= 0) return 0; else return n; }) );

最后,看完这篇文章,大家可以用委托来写一个最大值和最小值的方法,不懂的可以问我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值