一、Lambda表达式简介

Lambda表达式可以理解为匿名函数,可以包含表达式和语句。它提供了一种便利的形式来创建委托。

Lambda表达式使用这个运算符--- “=>”,它读成“goes to” ,该运算符的左边为输入参数,右边是表达式或者语句块。

二、例子

  例1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lambda
{
class Program
{
static void Main(string[] args)
{

//下面是C# 1中创建委托实例的代码
Func<string, int> del1 = new Func<string, int>(CallBackMethod);

//C#2中用匿名方法来创建委托实例,CallBackMethod
Func<string, int> del2 = delegate (string text)
{
return text.Length;
};

//C# 3中使用Lambda表达式来创建委托实例
Func<string, int> del3 = (string text) => text.Length;

// 可以省略参数类型string,把上面代码再简化为:
Func<string, int> del4 = (text) => text.Length;

// 如果Lambda表达式只需一个参数,并且那个参数可以隐式指定类型时,
// 此时可以把圆括号也省略,简化为:
Func<string, int> del5 = text => text.Length;

int length = del5("Test");
Console.WriteLine("Length:" + length);

Console.ReadKey();
}

private static int CallBackMethod(string str)
{
return str.Length;
}
}
}

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows.Forms;
7
8 namespace Lambda
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14
15 //下面是C# 1中创建委托实例的代码
16 Func<string, int> del1 = new Func<string, int>(CallBackMethod);
17
18 //C#2中用匿名方法来创建委托实例,CallBackMethod
19 Func<string, int> del2 = delegate (string text)
20 {
21 return text.Length;
22 };
23
24 //C# 3中使用Lambda表达式来创建委托实例
25 Func<string, int> del3 = (string text) => text.Length;
26
27 // 可以省略参数类型string,把上面代码再简化为:
28 Func<string, int> del4 = (text) => text.Length;
29
30 // 如果Lambda表达式只需一个参数,并且那个参数可以隐式指定类型时,
31 // 此时可以把圆括号也省略,简化为:
32 Func<string, int> del5 = text => text.Length;
33
34 int length = del5("Test");
35 Console.WriteLine("Length:" + length);
36
37 Console.ReadKey();
38 }
39
40 private static int CallBackMethod(string str)
41 {
42 return str.Length;
43 }
44 }
45 }

  例2: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lambda
{
class Program
{
static void Main(string[] args)
{
Button button1 = new Button() { Text = "按钮1", Width = 50, Height = 50, Name = "button1" };
button1.Left = 10;
button1.BackColor = System.Drawing.Color.Red;

Button button2 = new Button() { Text = "按钮二", Width = 50, Height = 50, Left = 70, Name = "button2" };
button2.BackColor = System.Drawing.Color.Green;

// C# 2中使用匿名方法来订阅事件
button1.Click += delegate (object sender, EventArgs e)
{
ReportEvent("Click事件", sender, e);
};

// C# 3Lambda表达式方式来订阅事件
button2.Click += (sender, e) => ReportEvent("Click事件", sender, e);

Form form = new Form { Name = "在控制台中创建的窗体", AutoSize = true };

form.Controls.Add(button1);
form.Controls.Add(button2);
// 运行窗体

string str = "";
bool isShow = false;
while (!isShow)
{
str = Console.ReadLine();
switch (str)
{
case "show":
isShow = true;
Application.Run(form);
break;
case "quit":
Environment.Exit(0);
break;

}
}
Console.ReadKey();
}
// 记录事件的回调方法
private static void ReportEvent(string title, object sender, EventArgs e)
{
Console.WriteLine("事件名称:{0}", title);
Console.WriteLine("激发事件的对象:{0}", (sender as Button).Name);
Console.WriteLine("事件参数类型: {0}", e.GetType());
Console.WriteLine();
Console.WriteLine();
}
}
}

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows.Forms;
7
8 namespace Lambda
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 Button button1 = new Button() { Text = "按钮1", Width = 50, Height = 50, Name = "button1" };
15 button1.Left = 10;
16 button1.BackColor = System.Drawing.Color.Red;
17
18 Button button2 = new Button() { Text = "按钮二", Width = 50, Height = 50, Left = 70, Name = "button2" };
19 button2.BackColor = System.Drawing.Color.Green;
20
21 // C# 2中使用匿名方法来订阅事件
22 button1.Click += delegate (object sender, EventArgs e)
23 {
24 ReportEvent("Click事件", sender, e);
25 };
26
27
28 // C# 3Lambda表达式方式来订阅事件
29 button2.Click += (sender, e) => ReportEvent("Click事件", sender, e);
30
31
32 Form form = new Form { Name = "在控制台中创建的窗体", AutoSize = true };
33
34 form.Controls.Add(button1);
35 form.Controls.Add(button2);
36 // 运行窗体
37
38 string str = "";
39 bool isShow = false;
40 while (!isShow)
41 {
42 str = Console.ReadLine();
43 switch (str)
44 {
45 case "show":
46 isShow = true;
47 Application.Run(form);
48 break;
49 case "quit":
50 Environment.Exit(0);
51 break;
52
53 }
54 }
55 Console.ReadKey();
56 }
57 // 记录事件的回调方法
58 private static void ReportEvent(string title, object sender, EventArgs e)
59 {
60 Console.WriteLine("事件名称:{0}", title);
61 Console.WriteLine("激发事件的对象:{0}", (sender as Button).Name);
62 Console.WriteLine("事件参数类型: {0}", e.GetType());
63 Console.WriteLine();
64 Console.WriteLine();
65 }
66 }
67 }

  运行结果如下:

  

 

C#基础知识---Lambda表达式的更多相关文章

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

         这几天有点不在状态,每一次自己很想认真的学习,写点东西的时候都会被各种小事情耽误,执行力太差.所以自己反思了下最近的学习情况,对于基础的知识,可以从书中和视频中学习到,自己还是需要注意下关于 ...

  2. JAVA基础知识|lambda与stream

    lambda与stream是java8中比较重要两个新特性,lambda表达式采用一种简洁的语法定义代码块,允许我们将行为传递到函数中.之前我们想将行为传递到函数中,仅有的选择是使用匿名内部类,现在我 ...

  3. C#基础:Lambda表达式

    从委托的角度来看,Lambda表达式与匿名方法没有区别.在[C#基础:匿名方法]一文中,我使用了匿名方法来调用List<T>的FindAll方法.从C# 3.0开始,在使用匿名方法的地方, ...

  4. Java基础语法-Lambda表达式

    1.Lambda表达式主要用于简写接口的操作等出现匿名内部类的地方,如下:我这里先定义一个Swim接口,以及它所定义的swim()方法 interface Swim{ void swim(); } 2 ...

  5. Java基础教程——Lambda表达式

    Lambda表达式 Java8引入Lambda表达式,可以使代码更简洁. 格式:参数,箭头,代码 (参数名)->{代码} Lambda表达式体现了"函数式编程思想"-- 面向 ...

  6. js基础知识:表达式

    一.什么是表达式?我理解的"表达式":程序执行到1个"表达式"时,会返回1个值到这个"表达式"所在的位置. var a = 10 , b = ...

  7. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  8. C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

    前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...

  9. Java基础知识总结之1.8新特性lambda表达式

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...

随机推荐

  1. C语言:条件编译

    假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出 ...

  2. ADB 关闭指定应用 并打开

    import subprocess,time sjh="192.168.1.102:5555" aa1="adb -s {0} shell pm clear com.ku ...

  3. Tutorial_6 运行结果

    1.buyer_favorites.txt 2.代码 package mapreduce; import java.io.IOException; import java.util.Iterator; ...

  4. 给App加上音频编辑功能,让你的用户Show起来

    如今短视频当道,BGM无处不在,用户在每个能秀的地方都想要加上个性表达的音频.作为一个开发者,需不断探索和迎合用户的行为喜好,音频编辑功能成为用户在编辑个人信息.内容创作.生活分享等场景下的必需品. ...

  5. ClickHouse学习系列之八【数据导入迁移&同步】

    背景 在介绍了一些ClickHouse相关的系列文章之后,大致对ClickHouse有了比较多的了解.它是一款非常优秀的OLAP数据库,为了更好的来展示其强大的OLAP能力,本文将介绍一些快速导入大量 ...

  6. Appium - adb命令操作

    1.Android 调试桥adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调 ...

  7. 关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理

    前言 上一节介绍了 https://github.com/houbb/junitperf 的入门使用. 这一节我们从源码的角度,剖析一下其实现方式. 性能测试该怎么做? Junit Rules jun ...

  8. PAT乙级:1094 谷歌的招聘 (20分)

    PAT乙级:1094 谷歌的招聘 (20分) 题干 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面 ...

  9. LCT(Link-Cut-Tree)

    LCT(Link-Cut-Tree) LCT维护一个森林,即把每个节点用splay维护,可以进行许多操作: 查询.修改链上的信息 随意指定原树的根(即换根) 动态连边.删边 合并两棵树.分离一棵树 动 ...

  10. (Opencv06)绘制轮廓函数

    (Opencv06)绘制轮廓函数 cv2.drawContours(image, contours, contourIdx, color, thickness) img: 指在哪副图像上绘制轮廓 会改 ...