📜  C#中的Lambda表达式(1)

📅  最后修改于: 2023-12-03 15:14:31.787000             🧑  作者: Mango

C#中的Lambda表达式

Lambda表达式是一种轻量级匿名函数,它可以用于简化某些代码的编写,特别是在使用LINQ时。Lambda表达式在C# 3.0中被引入,它是一个编译器生成的委托类型实例。

Lambda表达式的语法

Lambda表达式可以用于任何委托类型的赋值,它的语法如下:

(parameters) => expression-or-statement-block

其中,parameters表示Lambda表达式的输入参数列表,可以是空的、一个或多个参数,多个参数用逗号隔开。expression-or-statement-block表示Lambda表达式的主体,可以是一个表达式或多个语句的块。

下面是一些Lambda表达式的示例:

// Lambda表达式不带参数
() => Console.WriteLine("Hello, world!");

// Lambda表达式带一个参数
x => x * x;

// Lambda表达式带多个参数
(x, y) => x + y;

// Lambda表达式主体为一个表达式
x => x > 0 ? x : -x;

// Lambda表达式主体为多个语句的块
x =>
{
    Console.WriteLine("Start");
    Console.WriteLine(x);
    Console.WriteLine("End");
};
Lambda表达式的用法
在LINQ查询中使用Lambda表达式

在使用LINQ时,Lambda表达式通常用于定义查询条件、排序规则、分组依据等。下面是一些示例:

// 查询所有年龄大于20的人
var query1 = people.Where(x => x.Age > 20);

// 按年龄升序排序
var query2 = people.OrderBy(x => x.Age);

// 按国家分组
var query3 = people.GroupBy(x => x.Country);
在委托类型赋值中使用Lambda表达式

Lambda表达式可以用于任何委托类型的赋值,因此它可以替代一般的委托实例或匿名方法。下面是一些示例:

// 委托类型为Action,Lambda表达式不带参数
Action action1 = () => Console.WriteLine("Hello, world!");

// 委托类型为Func<int, int>,Lambda表达式带一个参数并返回一个整数
Func<int, int> func1 = x => x * x;

// 委托类型为Func<int, int, int>,Lambda表达式带两个参数并返回一个整数
Func<int, int, int> func2 = (x, y) => x + y;
Lambda表达式的类型推断

在使用Lambda表达式时,C#编译器通常可以推断出Lambda表达式的类型,因此可以省略一些类型声明。下面是一些示例:

// 省略参数类型
Func<int, int> func1 = x => x * x;

// 省略多个参数类型
Func<int, int, int> func2 = (x, y) => x + y;

// 省略委托类型
var func3 = (Func<int, int>)(x => x * x);
总结

Lambda表达式是C#中一个非常实用的特性,它可以大量简化代码的编写,特别是在使用LINQ时。在使用Lambda表达式时,需要注意语法、用法和类型推断等方面,并经常进行实践和积累,以提高自己的编程能力。