Lambda 表达式分析

本文介绍了C#中的Lambda表达式及其在LINQ查询中的应用。详细解释了Lambda表达式的结构,包括输入变量与表达式主体之间的lambda运算符,并通过具体的代码示例展示了如何使用Lambda表达式进行数据过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda 表达式分析
 
一个Lambda 表达式是这样编写的:首先定义一个参数列表,“=>”标记(针对Lambda运算符的C#标记全部来自Lambda演算)紧随其后,然后就是表达式。
 
The => token is called the lambda operator. It is used in lambda expressions to separate the input variables on the left side from the lambda body on the right side. Lambda expressions are inline expressions similar to anonymous methods but more flexible; they are used extensively in LINQ queries that are expressed in method syntax. The => operator is read as "goes to."--- FROM MSDN
 
LINQ to Object 和 Lambda 表达式示例:
            List<Person> people = new List<Person> {
                new Person { ID = 1,
                IDRole = 1,
                LastName = "Anderson",
                FirstName = "EntLib"},
                new Person { ID = 2,
                IDRole = 2,
                LastName = "Gray",
                FirstName = "Tom"},
                new Person { ID = 3,
                IDRole = 2,
                LastName = "Grant",
                FirstName = "Mary"}
            };
 
            var query = from p in people
                        where p.FirstName == "EntLib"
                        select p;
            ObjectDumper.Write(query);
 
            query = people.Where((p, index) => p.IDRole == index);
 
            ObjectDumper.Write(query);
 
其中(p, index) 就是参数列表,p.IDRole==index 就是表达式。Lambda 表达式的参数既可以是显式类型化的,也可以是隐式类型化的。编译器可以根据整个Lambda 表达式的上下文推断出参数的类型。
 
在C# 3.0 LINQ代码中,可以方便使用Lambda 表达式来建立查询表达式,任何要求delegate参数的方法,都可以传入一个Lambda 表达式。
 
C# 3.0 中也允许使用一系列代码语句来定义Lambda 表达式,当表达式必须使用多行代码处理参数时,可以使用一对大括号确定这些语句的范围。
query = people.Where((p, index) =>{
 Console.WriteLine( " Hello, EntLib.com " );
 Console.WriteLine( "Value of index is :{0}", index);
 return p.IDRole == index;
} );
 
EntLib.com 开源论坛开发小组,欢迎交流、分享.Net 技术和源代码。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值