C#中的Lamda表达式

182 阅读2分钟

本文仅用于记录和分享学习过程,如有错误望各位指正

前言

本文主要参考自微软官方文档 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
}