C# Lambda表达式概述

开发 后端
这里介绍C# ambda表达式参数类型可以是隐式类型或显式类型。在显式列表中,每个参数的类型是显式指定的,在隐式列表中,参数的类型由Lambda表达式出现的语境自动推断类型。

C#新语言特性还是比较常见的东西,这里我们主要介绍C# Lambda表达式,包括介绍Lambda表达式参数类型可以是隐式类型或显式类型等方面。

C# Lambda表达式

我们从“所有字符串查找包含YJingLee子字符串”说起。在C# 2.0中,匿名方法允许我们以内联的方式来实现委托实例,它提供强大的函数式编程语言,但是标记显得相当的冗长和带有强制性。我们使用C# 2.0 中的匿名方法查找,代码如下:

  1. var inString = list.FindAll(delegate(string s)  
  2. { return s.Indexof("YJingLee") >= 0; }); 

现在可以使用C# 3.0带来的Lambda表达式允许我们使用一种更接近人的思维、更自然的方式来实现类似于匿名方法同样的效果,看下面的代码多么简洁:

  1. var inString = list.FindAll(s => s.Indexof("YJingLee") >= 0); 

Lambda表达式格式:(参数列表)=>表达式或语句块
具体意义:定义Lambda接受参数列表,运行表达式或语句块返回表达式或语句块的值传给这个参数列表。

C# ambda表达式参数类型可以是隐式类型或显式类型。在显式列表中,每个参数的类型是显式指定的,在隐式列表中,参数的类型由Lambda表达式出现的语境自动推断类型。
Lambda表达式的参数列表可以有一个或多个参数,或者无参数。在有单一的隐型参数的lambda表达式中,圆括号可以从参数列表中省略。
例如:

  1. (x, y) => x * y;//多参数,隐式类型=>表达式  
  2. x => x * 10;//单参数,隐式类型=>表达式  
  3. x => { return x * 10; }; //单参数,隐式类型=>语句块  
  4. (int x) => x * 10;//单参数,显式类型=>表达式  
  5. (int x) => { return x * 10; };//单参数,显式类型=>语句块  
  6. () => Console.WriteLine(); //无参数 

下面看这个例子:
在前面的帖子中,我们写了一个User类及增加了2个人,接下来,我们使用由LINQ提供的新的Where和Average方法来返回集合中的人的一个子集,以及计算这个集合中的人的平均年龄:

  1. List<User> user = new List<User>{  
  2. new User{Id=1,Name="YJingLee",Age=22},  
  3. new User{Id=2,Name="XieQing",Age=25},  
  4. };  
  5. //获取特定人时所用的过滤条件,p参数属于User类型  
  6. var results = user.Where(p => p.Name == "YJingLee").ToList();  
  7. //用User对象的Age值计算平均年龄  
  8. var average = user.Average(p => p.Age); 

效果图如下:

Lambda表达式

对这个Lambda表达式做个简要分析:

  1. var resultsdelegate = user.Where(delegate(User p)  
  2. {  
  3. return p.Name == "YJingLee";// 返回一个布尔值  
  4. });  
  5. var averagedelegate = user.Average(delegate(User p)  
  6. {  
  7. return p.Age;  
  8. }); 

Lambda表达式简要分析

C# Lambda表达式L可以被转换为委托类型D,需要满足以下条件:
L的参数类型要与D的参数个数相等,类型相同,返回类型相同,无论是表达式,还是语句块。注意隐式类型要参与类型辨析。

【编辑推荐】

  1. C# const常量详细介绍
  2. C# Lambda表达式学习笔记
  3. C#隐式类型局部变量经验总结
  4. 调用C# Thread.Start()方法
  5. C# CheckStatus()方法
责任编辑:佚名 来源: 博客园
相关推荐

2009-08-26 16:17:23

C# Lambda表达

2009-08-27 09:57:50

C# Lambda表达

2024-03-25 13:46:12

C#Lambda编程

2021-08-31 07:19:41

Lambda表达式C#

2009-07-09 09:51:07

Lambda表达式C#

2010-09-14 14:05:42

C#委托

2009-09-14 13:57:20

C# Lambda表达Lambda表达式

2011-05-20 17:50:45

C#

2010-10-19 10:03:02

Lambda表达式

2022-11-07 07:11:19

C#lambda函数

2009-08-07 15:41:39

C#正规表达式

2009-07-01 09:56:10

C#3.0

2020-10-16 06:40:25

C++匿名函数

2009-09-11 09:48:27

Linq Lambda

2023-11-02 08:25:58

C++Lambda

2022-12-05 09:31:51

接口lambda表达式

2009-09-15 15:18:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-08-07 15:16:10

C#正则表达式

2009-08-03 17:27:14

C#正则表达式
点赞
收藏

51CTO技术栈公众号