一、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. 「SPOJ 3105」Power Modulo Inverted

    「SPOJ 3105」Power Modulo Inverted 传送门 题目大意: 求关于 \(x\) 的方程 \[a^x \equiv b \;(\mathrm{mod}\; p) \] 的最小自 ...

  2. C语言:case详解

    C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况.例如,输入一个整数,输出该整数对应的星期几的英 ...

  3. 短信链接点击跳转到微信小程序

    短信轰炸的时代,之前链接都是跳转到网页的,后来发现粘性不强,再次唤醒用户成本较高,但小程序的订阅功能,再次唤醒成本较低,还便于给用户通知结果.所以现在链接都改跳转到小程序了.废话不多说,现在就看看是如 ...

  4. Qt Creator内qmake配置静态编译

    起因 利用QT Creator编写一些纯C/C++应用,默认配置下是动态编译 解决 解决起来很简单,这里只是附上配置备忘;-) msvc: { QMAKE_CFLAGS_RELEASE += /MT ...

  5. mysql查看当前连接数

    show status like 'Threads%';   需要root权限才能看到所有的连接

  6. java时间工具类型,格式化时间,最近7天 月初 月末 季度 月度 时间格式化 等等

    package com.tz.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util. ...

  7. kivy里rgb,rgba颜色相关知识,以及支持十六进制颜色值方法

    rgb,rgba在kivy里的格式为如下: rgb:1,1,1---->每个参数为0-1的数值(如0.1),也就是说第一位如果是0.1意思是10%的红色,由r代表,g代表绿色,b代表蓝色 rgb ...

  8. 记录21.07.24 —— Vue的组件与路由

    VUE组件 作用:复用性 创建组件的三种方式 第一种:使用extends搭配component方法 第二种:直接使用component方法 只有用vue声明且命名的才称之为创建组件 注意:templa ...

  9. Vue学习笔记(一)简单使用和插值操作

    目录 一.Vue是什么 二.Vue简单体验 1. 声明式渲染 2. vue列表展示 3. 处理用户输入(事件监听) 三.插值操作 1. Mustache语法 2. 常用v-指令 v-once v-ht ...

  10. Java面向对象06——类与对象小结

    小结  /* 1. 类与对象    类是一个模板:抽象,对象是一个具体的实例 2. 方法    定义.调用 ​ 3. 对应的引用    引用类型: 基本类型(8)    对象是通过引用来操作的:栈-- ...