C#学习笔记,28——匿名委托和Lambda表达式

说明(2017-11-21 18:51:32):

1. 例子为求1~100的和,答案应该是5050(小学学算盘的时候,我爹就让我算,从1拨到100是多少呀?当时的我年幼无知,还不知道高斯小时候的故事,扒拉了半天高高兴兴的去说答案,结果说不对,艹!)

2. Lambda表达式是将匿名委托给简化了的写法,省去了delegate关键字,省去了参数类型,但是要保证参数类型不能出错,也就是跟委托定义时的参数类型一致。

3. 其他没啥好说的看注释,下一讲用Lambda表达式求水仙花数。

正常写法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _05_匿名委托
{
    class Program
    {
        static void Main(string[] args)
        {
            //调用方法
            Console.WriteLine(GetSum(1, 100));
            Console.ReadKey();
        }
        //定义求和的方法
        public static int GetSum(int x, int y)
        {
            int sum = 0;
            for (int i = x; i <= y; i++)
            {
                sum += i;
            }
            return sum;
        }
    }
}

匿名委托写法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _05_匿名委托
{
    class Program
    {
        public delegate int MyDel(int x, int y);
        static void Main(string[] args)
        {
            //记得最后要加分号,因为是赋值,跟js一样。
            MyDel myDel = delegate(int x, int y)
            {
                //在委托里面定义求和的方法,匿名委托用于只需要调用一次的方法,省的再起个方法名了(说的就是上面的GetSum!)
                int sum = 0;
                for (int i = x; i <= y; i++)
                {
                    sum += i;
                }
                return sum;
            };
            Console.WriteLine(myDel(1, 100));
            Console.ReadKey();
        }
    }
}

Lambda表达式写法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _05_匿名委托
{
    class Program
    {
        public delegate int MyDel(int x, int y);
        static void Main(string[] args)
        {
            //尼玛连参数类型都省了,还有那个delegate关键字,太特么懒了!
            MyDel myDel = (a, b) =>
            {
                int sum = 0;
                for (int i = a; i <= b; i++)
                {
                    sum += i;
                }
                return sum;
            };
            Console.WriteLine(myDel(1, 100));
            Console.ReadKey();
        }
    }
}