本文仅用于记录和分享学习过程,如有错误望各位指正
前言
本文主要参考自微软官方文档 docs.microsoft.com/zh-cn/dotne…
定义
Lamda表达式是一种匿名函数,可使代码简化高效,常用作委托和回调
回调是当作参数传递的函数,在C语言中使用函数指针实现,在其他语言中通常使用仿函数或匿名函数等操作实现
实现方式
Lamda表达式分为表达式Lamda和语句Lamda,书写格式类似,使用运算符 =>,左侧括号内包含参数,右侧为表达式或语句块
1.表达式Lamda
当 => 运算符右侧存在的是单个表达式时,此Lamda表达式视为表达式Lamda 该Lamda表达式会返回右侧表达式的结果,形式如下
( input - parameter) => expression
2.语句Lamda
在 => 运算符右侧使用大括号包含任意数量的语句,此Lamda表达式将执行大括号内的语句,也可使用return关键字返回结果,形式如下
(input - parameter) => {<sequence-of-statement>}
语句Lamda通常不会包含三个以上的语句
3.参数
Lamda表达式的参数包含在=>运算符左侧的括号中,没有输入参数时,使用空括号
() => expression
只有一个参数的时可以省略括号
x => x * x
多个参数用逗号分隔
(x, y) => x * y
编译器会根据Lamda表达式主体和参数类型来推断类型,由此通常不必为参数指定类型,若编译器无法推断则需要显示指定类型
(int x, string s) => s.Length > x
参数必须全部为隐式或显示表示,否则会引发错误
4.变量范围
Lamda表达式可以引用定义该表达式的方法的局部变量或参数,由Lamda表达式引用的变量称为捕获变量,捕获的变量在调用而不是捕获时求值,表达式也可更新捕获变量
static void Main(string[] args)
{
int j = 2;
Func<int, int> multiplier = i => i * j;
j = 3;
Console.WriteLine(multiplier(1));//3
}