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

Posted —阿辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于30天C#基础巩固----Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

30天C#基础巩固-----序列化,集合

30天C#基础巩固------读写流(StreamWrite/StreamReader)

30天C#基础巩固------了解委托,string练习

30天C#基础巩固----程序集,反射

30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集

30天C#基础巩固------this,base,string中的方法,StringBuilder性能