一、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. ctf之SusCTF2017-Crack Zip

    题目信息如下,可知为杂项题,且无提示 下载文件打开如图,该压缩包是加密的 首先想到的是暴力破解,下载zip暴力破解软件打开文件. 下一步,选择暴力破解 进行暴力破解设定,进行破解 破解完成,得到密解压 ...

  2. 洛谷 P4008 [NOI2003]文本编辑器

    先推广一下 求赞 我们考虑这样的一个问题 给你一个序列,要求你支持插入,删除,查询单点值 如果用数组,查询O(1),插入删除最坏O(n) 如果用链表,插入删除O(1),查询最坏O(n) 如果用平衡树- ...

  3. session过期跳转到登陆页面并解决跳出iframe问题

    首先,先转载如下这篇博主写的关于后台系统使用iframe不能跳出的问题,地址:https://blog.csdn.net/xiaocen99/article/details/38521649 在ifr ...

  4. Appium - adb monkey参数(三)

    monkey 参数 1.常规类参数 A.帮助类参数 monkey -h B.日志级别  $ adb shell monkey -v <event-count> . 2.事件类参数 A .执 ...

  5. 为了让她学画画——熬夜用canvas实现了一个画板

    前言 大家好,我是Fly, canvas真是个强大的东西,每天沉迷这个无法自拔, 可以做游戏,可以对图片处理,后面会给大家分享一篇,canvas实现两张图片找不同的功能, 听着是不是挺有意思的, 有点 ...

  6. windows系统pycharm终端更改为git bash

    引自:https://blog.csdn.net/u011519550/article/details/89855122 设置路径:file--setting--tools--terminal--ap ...

  7. edraw mindmaster pro 8.1.0安装破解教程

    Edraw MindMaster Pro 8.1.0是一款思维导图(脑图)设计软件,头脑风暴.思维整理.项目策划.团队协作,多场景提升您的效率,功能齐全,个人觉得比xmind好用上手,文章手把手教你安 ...

  8. 实现html页面转pdf

    实现方式比较简单,使用js代码实现的. 需要引入的js: 1.jQuery.js: 2.html2canvas.js(实现方式是先将Html页面转换成image图片然后在转换为pdf,所以转换之后会有 ...

  9. phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)

    phpmyadmin 2.x版本 POST /scripts/setup.php HTTP/1.1 Host: 192.168.49.2:8080 Accept-Encoding: gzip, def ...

  10. vue 子目录配置,负载均衡 nginx

    1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue   域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...