C#3.0(.NET3.5)中引入了Lambda表达式和LINQ。Lambda表达式是使用一些特殊语法表示匿名方法的较短方法。

最基本的Lambda表达式语法如下:

(参数列表)=>{方法体}

说明:

1、参数列表中的参数类型可以是明确类型或者推断类型。

2、如果是推断类型,则参数的数据类型将由编辑器根据上下文自动推断出来。

让我们看看Lambda表达式是如何从匿名方法演变而来的。

相关示例:

 delegate(int item) { return item %  == ; };

1、Lambda表达式从匿名方法演变,首先删除delegate关键字和参数类型并添加Lambda运算符=>,演变后的代码如下:

 (item)=>{return item %  == ;};

2、如果我们只有一个返回值的语句,那么我们不需要花括号、返回和分号,所以我们可以去掉这些符号,演变后的代码如下:

 (item)=>item % == 0;

3、如果我们只有一个参数,我们也可以删除(),代码如下:

 item=>item % == 0;

因此,我们得到如下所示的Lambda表达式:

item => item % 2 == 0

其中item是参数,=>是Lambda运算符,item % 2 == 0是正文表达式。

二、具有多个参数的Lambda表达式

如果需要传递多个参数,那么必须将参数括在括号内,如下所示:

 (ints, item) => ints.Contains(item);

如果不想使用推断类型,那么可以给出每个参数的类型,如下所示:

 (int[] ints, int item) => ints.Contains(item)

三、不带任何参数的Lambda表达式

在Lambda表达式中可以没有参数,如下所示:

 () => Console.WriteLine("这是一个不带任何参数的Lambda表达式");

四、正文表达式中有多条语句

在前面讲过,如果正文表达式有一个语句,那么可以去掉方法体外面的大括号。如果正文表达式中有多条语句,那么必须用大括号将正文表达式括起来,如下所示:

(ints, item) =>
{
Console.WriteLine("这是包含多条语句的Lambda表达式");
return ints.Contains(item);
};

五、表达式中的局部变量

你可以在表达式的主体中声明一个变量,以便在表达式主体的任何位置使用它,如下所示:

 ints =>
{
int item = ;
return ints.Contains(item);
};

六、Lambda表达式中的内置泛型委托

1、Func委托

当你想从lambda表达式返回一些东西时,使用Func <> delegate。

其中T是输入参数的类型,TResult是返回类型。

示例代码如下:

 Func<int[], bool> isContains = p => p.Equals();
int[] ints = { , , , , , , , };
bool isEquals = isContains(ints);

在上面的例子中,Func委托期望第一个输入参数是int[]类型,返回类型是boolean。Lambda表达式是p => p.Equals(10)。

2、Action委托

与Func委托不同,Action委托只能有输入参数。 当不需要从lambda表达式返回任何值时,请使用Action委托类型。

示例代码如下:

 Action<int[]> PrintItem = p =>
{
foreach (int item in p)
{
Console.WriteLine(item);
}
};
int[] ints = { , , , , , , , };
PrintItem(ints);

七、在LINQ中使用Lambda表达式

通常情况下,Lambda表达式与LINQ查询一起使用。枚举静态类包括接受Func <TSource,bool>的IEnumerable <T>的Where扩展方法。IEnumerable <Int>集合的Where()扩展方法需要传递Func <Student,bool>,如下所示:

现在,您可以将分配给Func委托的lambda表达式传递给方法语法中的Where()扩展方法,如下所示:

 Func<int, bool> isContains = p =>p.Equals ();
int[] ints = { , , , , , , , };
var result = ints.Where(isContains).ToList();

八、Lambda表达式要点总结

1、Lambda表达式是一种表示匿名方法的更短的方法。

2、Lambda表达式语法:parameters =>正文表达式

3、Lambda表达式可以在()中具有零个或多个参数。

4、Lambda表达式可以在大括号{}中的正文表达式中有一条或多条语句。

5、Lambda表达式可以分配给Func,Action或Predicate委托。

6、Lambda表达式可以以类似的方式调用委托。

最新文章

  1. Ember.js 的视图层
  2. reactjs 注意点
  3. PHP 操作MySQL———来自copy
  4. Shell 变量
  5. mac android studio 编译时报Class JavaLaunchHelper is implemented in both
  6. POI设置边框
  7. LotusPhp中配置文件组件LtConfig详解
  8. 一个FragmentActivity多个Fragment的生命周期事件记录
  9. CentOS6.5 下 Mysql5.7主从复制
  10. 51单片机模拟I2C总线的C语言实现
  11. tabBar隐藏与显现 hidesBottomBarWhenPushed
  12. springMVC中ajax的运用于注意事项
  13. 洛谷P4774 [NOI2018]屠龙勇士 [扩欧,中国剩余定理]
  14. 产品经理说|AIOps 让告警管理变得更智能
  15. 让你提升命令行效率的 Bash 快捷键
  16. SQL Case when 的使用
  17. Telnet模拟系统(Linux c)
  18. Laravel框架 -- Validator 可用的验证规则
  19. GDAL读取影像并插值
  20. VIM - 模式简介

热门文章

  1. 【LeetCode】145. Binary Tree Postorder Traversal (3 solutions)
  2. Android屏幕density, dip等相关概念总结
  3. oracle排序使用,很多中函数,不同的效果
  4. phpexcel单元格内换行
  5. 如何安装rockmongo(gui for mongodb)
  6. scala-trait实现AOP编程
  7. 摘记—Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha
  8. C#特性Attribute学习
  9. rabbitmq 基本信息
  10. error: expected expression before &#39;struct&#39;