① Lambda表达式:
Lambda表达式是可以省略方法名称、省略方法返回值类型(根据返回实际值类型而定),是匿名函数的简写。
1.参数可以省略类型说明。
2.如只有一个参数,可以省略()。
3.如方法只有一句,可以省略 { } 和 return。
Lambda与委托, 事件配合使用。
注: 不会对编程语言的功能有所影响, 但是更方便使用.
② Lambda语法:
将"参数列表"通过 =>(goes to)传输至函数体进行逻辑性处理。
③案例
案例一 无参无返Lambda
案例二 有参无返Lambda
案例三 有参有返Lambda
案例四 Lambda作为参数
④Lambda表达式实现闭包
C#中以对象作为最小粒度,如果要存储状态信息,当然是存储在对象或类中,方法本身是没有状态,不能存储信息,如何使方法拥有自己的状态信息?
可以使用Lambda来实现闭包来解决,Lambda实现将函数进行封装。
闭包是一种语言特性,它允许在函数内部定义的函数访问外部函数的局部变量,即使外层函数执行已终止。
闭包本质是一个对象(编译后),使用闭包后可以实现拥有私有状态的函数。
示例1 调用实例
实现代码
示例2 Lambda表达式调用
Lambda表达式实现代码
示例3
winfrom界面
实现代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyWorkBook.MyTest
{
public partial class LambdaTest : Form
{
public LambdaTest()
{
InitializeComponent();
this.button1.Click += btnInc1();//注册点击事件
this.button2.Click += btnInc2();
}
//①点击次数。
/* 传统方式
int n = 0;
private void button1_Click(object sender, EventArgs e)
{
button1.Text = $"你点了 {++n} 次。";
}*/
//Lambda闭包方式
private EventHandler btnInc1()
{
int n = 0;
return (sender, e) => (sender as Button).Text = $"你点了 {++n} 次。";
}
//②求出当前值,个数,平均值
/* 传统方法
double sum = 0;
int count = 0;
//
private void button2_Click(object sender, EventArgs e)
{
sum += double.Parse(textBox1.Text);//将数字的字符串转换等效双精度浮点数。
count++;//计数
label1.Text = $"sum = {sum},\t count = {count},\t avg = {(sum / count)} ";
}*/
//Lambda闭包方式
private EventHandler btnInc2()
{
double sum = 0;
int count = 0;
return (sender, e) =>
{
sum += double.Parse(textBox1.Text);//将数字的字符串转换等效双精度浮点数。
count++;//计数
label1.Text = $"sum = {sum},\t count = {count},\t avg = {(sum / count)} ";
};
}
}
}