C#中Lambda表达式的三种写法

1. Lambda表达式介绍

在C#中,Lambda表达式是一种匿名函数的简洁写法,它可以用于创建委托或表达式树类型。Lambda表达式以“=>”符号分隔参数和表达式,并可以在表达式中使用参数。

2. 基本语法

2.1 不带参数的Lambda表达式

当Lambda表达式不需要参数时,可以使用空括号表示参数列表。

() => Console.WriteLine("Hello World");

这个例子中,Lambda表达式不带任何参数,直接调用了Console.WriteLine方法输出了一句"Hello World"。

2.2 带一个参数的Lambda表达式

当Lambda表达式只有一个参数时,可以省略参数的括号。

x => x * x;

这个例子中,Lambda表达式以参数x为输入,返回x * x的结果。

2.3 带多个参数的Lambda表达式

如果Lambda表达式有多个参数,则需要使用括号将参数列表括起来。

(x, y) => x + y;

这个例子中,Lambda表达式以参数xy为输入,返回x + y的结果。

3. Lambda表达式的应用场景

Lambda表达式的简洁和灵活性使其在许多情况下都能发挥作用。

3.1 LINQ查询

Lambda表达式在使用LINQ进行数据查询时非常常见。例如,我们可以使用Lambda表达式筛选出所有年龄大于18岁的人:

List<Person> people = GetPeople();

List<Person> adults = people.Where(p => p.Age > 18).ToList();

这个例子中,我们使用Lambda表达式p => p.Age > 18来定义筛选条件,然后使用Where方法将符合条件的人筛选出来。

3.2 委托回调

Lambda表达式可以用作委托的参数,用于定义回调函数。例如,我们可以使用Lambda表达式定义一个执行加法的委托:

Action<int, int> add = (x, y) => Console.WriteLine(x + y);

add(5, 3); // 输出 8

这个例子中,我们定义了一个接受两个整数参数的add委托,并使用Lambda表达式(x, y) => Console.WriteLine(x + y)作为回调函数。

3.3 表达式树

Lambda表达式还可以用于生成表达式树,用于动态创建代码。例如,我们可以使用Lambda表达式生成一个动态计算两个数乘积的函数:

ParameterExpression x = Expression.Parameter(typeof(int), "x");

ParameterExpression y = Expression.Parameter(typeof(int), "y");

BinaryExpression multiply = Expression.Multiply(x, y);

Expression<Func<int, int, int>> lambda = Expression.Lambda<Func<int, int, int>>(multiply, x, y);

Func<int, int, int> multiplyFunc = lambda.Compile();

int result = multiplyFunc(3, 4); // 结果为 12

在这个例子中,我们首先使用Expression.Parameter方法定义了两个参数xy,然后使用Expression.Multiply方法创建了一个乘法表达式。最后,使用Expression.Lambda方法将乘法表达式打包成一个Lambda表达式,并调用Compile方法将Lambda表达式编译为可执行的委托。

4. 总结

通过本文,我们详细介绍了C#中Lambda表达式的三种写法,并阐述了它们的应用场景。Lambda表达式的简洁和灵活性使其在许多情况下都能发挥作用,特别是在LINQ查询、委托回调和表达式树生成等方面。通过灵活运用Lambda表达式,我们能够编写更加强大和简洁的代码。

后端开发标签