当前位置:首页 > C#学习 > 正文内容

C# lambda表达式学习

小道5年前 (2019-01-18)C#学习8312

Lambda 表达式是一种可用于创建 委托 或 表达式目录树 类型的 匿名函数 。 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。

"Lambda表达式"是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。所有Lambda表达式都使用Lambda运算符=>,该运算符读作"goes to"。Lambda运算符的左边是输入参数(如果有),右边是表达式或语句块。Lambda表达式x => x * x读作"x goes to x times x"。可以将此表达式分配给委托类型.

image.png

使用Lambda表达式简化委托:

using System;

namespace lambda入门
{
    class Program
    {
        static void Main(string[] args)
        {
            Action<int> a1 = delegate (int i) { Console.WriteLine("Action委托,使用匿名委托结果:" + i * 1); };//使用匿名委托。
            //Action 泛型委托,没有返回值,参数为 int 类型。 
            a1(5);//调用

            Action<int> a2 = (int i) => { Console.WriteLine("Action委托,使用lambda表达式1结果:" + i * 2); };//lambda表达式
            a2(5);

            Action<int> a3 = (i) => { Console.WriteLine("Action委托,使用lambda表达式2结果:" + i * 3); };//可以省略 参数类型
            a3(5);

            Action<int> a4 = i => { Console.WriteLine("Action委托,使用lambda表达式3结果:" + i * 4); };//只有一个参数,可以省略 参数括号。
            a4(5);

            Func<string, int, string> f1 = delegate (string s, int i) { return "Func委托,使用匿名委托结果:f1" + s + i; };//使用匿名委托。
            //Func泛型委托,有返回值,最后一个参数类型是返回值类型。 
            Console.WriteLine(f1("字符串", 1));

            Func<string, int, string> f2 = (string s, int i) => { return "Func委托,使用lambda表达式1结果:f2" + s + i; };//lambda表达式
            Console.WriteLine(f2("字符串", 2));

            Func<string, int, string> f3 = (s, i) => { return "Func委托,使用lambda表达式2结果:f3" + s + i; };//可以省略 参数类型,多个参数不可省略括号
            Console.WriteLine(f3("字符串", 3));

            Func<string, int, string> f4 = (s, i) => "Func委托,使用lambda表达式3结果:f4" + s + i;//只有一句返回值 可以省略 大括号和 return。
            Console.WriteLine(f4("字符串", 4));

            Func<int, int> f5 = i => i + 5;//只有一个参数可以省略参数小括号, 返回值 大括号和retur,可省略。
            Console.WriteLine("Func委托,使用lambda表达式4结果: f4" + f5(5));

            Console.ReadKey();
        }
    }
}

生成结果:

Lambda表达式 委托简化

使用Lambda表达式写出GetMax泛型方法:

比较整型数组大小和 类的大小。

using System;

namespace Lambda表达式GetMax
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 5, 8, 9, 6, 6, 4, 7, 8, 10, 16, 14, 13 };//整型数组
            int max1 = GetMax(nums, compareFunc);//调用compareFunc方法
            int max2 = GetMax(nums, delegate (int i1, int i2) { return i1 > i2; });//匿名委托
            int max3 = GetMax(nums, (i1, i2) => { return i1 > i2; });//Lambda 省略参数类型。
            int max4 = GetMax(nums, (i1, i2) => i1 > i2);//Lambda 省略参数类型,只有一句返回值,可省略 大括号和return。
            Console.WriteLine("max1结果:" + max1);//输出
            Console.WriteLine("max2结果:" + max2);//输出
            Console.WriteLine("max3结果:" + max3);//输出
            Console.WriteLine("max4结果:" + max4);//输出

            //比较两个类的大小。
            Person[] ps = new Person[] { new Person("小白", 18), new Person("小黑", 15), new Person("小黄", 20) };//Person数组
            Person p = GetMax(ps, (p1, p2) => p1.Age > p2.Age);//调用泛型方法。比较年龄大小
            Console.WriteLine("姓名:"+p.Name+" 年龄:"+p.Age);//输出

            Console.ReadKey();
        }
        static bool compareFunc(int i1, int i2)//判断方法
        {
            return i1 > i2;//返回比较大小
        }
        static T GetMax<T>(T[] objs, Func<T, T, bool> compareFunc)//泛型方法
        {
            T max = objs[0];
            for (int i = 0; i < objs.Length; i++)//循环
            {
                if (compareFunc(objs[i], max))//调用Func委托,结果返回比较大小.
                {
                    max = objs[i];
                }
            }
            return max;//返回
        }
        class Person//类
        {
            public string Name { get; set; }//姓名属性
            public int Age { get; set; }//年龄属性

            public Person(string name, int age)//构造函数
            {
                this.Name = name;//赋值
                this.Age = age;//赋值
            }
        }
    }
}

生成结果:

image.png


扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/173.html

分享给朋友:

“C# lambda表达式学习” 的相关文章

成员访问级别和属性

成员访问级别和属性

字段、方法、属性都可以叫做类的成员Member,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。几个访问级别:public(任何地方都可以访问);private(默认级别。只能由本类中的成员访问)。还有internal、protected两个...

构造函数

构造函数

构造函数用来创建对象,并且可以在构造函数中对对象进行初始化。构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用。构造函数可以有参数,new对象的时候传递函数参数即可构造函数可以重载,也就是有多个参数不同的构造函数。如果不指定构造函数,则类有一个默认的无参构造函数。如果指...

索引器

索引器

C#中提供了按照索引器进行访问的方法定义索引器的方式:string this[int index]{get { return ""; }set { }},string为索引器的类型,[]中是参数列表。进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值...

第一个Windows程序

第一个Windows程序

WinForm:Windows Form,.Net中用来开发Windows窗口程序的技术,无论是之前学的控制台程序,还是后面要学的ASP.Net都是调用.Net框架,因此所有知识点都是一样的。新建一个Windows项目:Windows→Windows窗体应用程序控件:窗口上很多元素都是相似的,因此将...

评论列表

跨境电商运营
3年前 (2021-05-14)

非常不错的文章 下次还会再来!

ppt课件
3年前 (2021-03-22)

非常不错!关注一下

招投标
3年前 (2021-02-23)

博客很棒 值得分享

头条
头条 IP:广西
5年前 (2019-09-22)

文章不错支持一下吧

今日头条新闻
5年前 (2019-08-06)

文章不错支持一下吧

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。