30天C#基础巩固----Lambda表达式

     这几天有点不在状态,每一次自己很想认真的学习,写点东西的时候都会被各种小事情耽误,执行力太差。所以自己反思了下最近的学习情况,对于基础的知识,可以从书中和视频中学习到,自己还是需要注意下关于自己以前做的项目中的一些知识点,那些才是HR提问的关键所在。今天都6.4号了,时间过的真是快呀,学校7.18左右放假,自己打算去西安看看,能不能找到一个实习工作,不行的话只能等到大四的第一学期去走校招。可以我们大四的第一学期还有很多课,真不知道老师是如何想的。所以在这还剩不到快2个月的时间里,把自己想要学习的东西好好的学习下,提高自己的执行力和自控力。

委托,匿名函数,Lambda表达式

   关于委托前面有说的,其实就是那么几个步骤,但是想在项目中熟练的使用,不是那么简单的,这些知识点都不一些不太容易掌握的,很抽象,需要通过长时间的项目代码练习才可以更好的理解里面前辈们所提倡的观点思路。

匿名函数----实现1--100的和。

    /// <summary>
    /// 匿名方法
    /// </summary>
    class Program
    {
        //定义委托。
        public delegate int GetSumNum(int min,int max);
        static void Main(string[] args)
        {
            //匿名方法,必须使用delegate来定义,参数和返回值必须和定义的委托一样。
            GetSumNum _getSum = delegate(int min,int max)
            {
                int sum = 0;
                for (int i =min; i <=max; i++)
                {
                    sum += i;                    
                }
                return sum;
            };
            int a=_getSum(1,100); //调用匿名函数,传递参数。
            Console.WriteLine(a);
            Console.ReadKey();
        }
    }

image

通过Lambda表达式来得到结果,比较二者的区别和相似的地方。

    /// <summary>
    /// 匿名方法
    /// </summary>
    class Program
    {
        //定义委托。
        public delegate int GetSumNum(int min, int max);
        static void Main(string[] args)
        {
            //Lambda表达式  注意:要是方法体中代码很多,我们就可以写一个{ }来表示。
            GetSumNum _getSum = (min, max) =>
            {
                int sum = 0;
                for (int i = min; i <= max; i++)
                {
                    sum += i;
                }
                return sum;
            };
            int a = _getSum(1, 100); //调用匿名函数,传递参数。
            Console.WriteLine(a);
            Console.ReadKey();
        }
    }

image

注意:

       我们使用Lambda表达式的时候,(a,b)=>{}; a,b是我们的参数,{}里面是我们需要写的代码段,要是只有一句代码直接写在后面不需要写{}。

eg:得到1--1000之间的水仙花数。

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。

    class Program
    {
        public delegate bool GetNum(int num);
        static void Main(string[] args)
        {
            List<int> listNum=new List<int>();
            for (int i = 100; i <1000; i++)
            {
                listNum.Add(i);
            }
            //将Lambda的方法传递进去,在MyWhere中进行执行。
           int[] ns=MyWhere(listNum.ToArray(), e =>
            {
                //123
                int n1 = e%10;          //  3
                int n2 = e/10%10;   // 2
                int n3 = e/100;     //  1
                return (n1*n1*n1 + n2*n2*n2 + n3*n3*n3) == e;
            });
            Console.WriteLine("100--1000之间的水仙花数------:");
            for (int i = 0; i <ns.Length; i++)
            {
                Console.WriteLine(ns[i]);
            }            
            Console.ReadKey();
        }
        //实现委托的方法
        public static int[] MyWhere(int[] num,GetNum ck)
        {
            List<int> list=new List<int>();
            for (int i = 0; i <num.Length; i++)
            {
                if (ck(num[i]))
                {
                     list.Add(num[i]);
                }                
            }
            return list.ToArray();
        }
    }

image

原文地址:https://www.cnblogs.com/netxiaohui/p/5558382.html