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表达式以参数x
和y
为输入,返回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
方法定义了两个参数x
和y
,然后使用Expression.Multiply
方法创建了一个乘法表达式。最后,使用Expression.Lambda
方法将乘法表达式打包成一个Lambda表达式,并调用Compile
方法将Lambda表达式编译为可执行的委托。
4. 总结
通过本文,我们详细介绍了C#中Lambda表达式的三种写法,并阐述了它们的应用场景。Lambda表达式的简洁和灵活性使其在许多情况下都能发挥作用,特别是在LINQ查询、委托回调和表达式树生成等方面。通过灵活运用Lambda表达式,我们能够编写更加强大和简洁的代码。