2007.5.11 李建忠

C# 3.0语言主要增强

隐含类型局部变量

扩展方法

对象与集合初始化器

匿名类型

Lambda表达式

查询表达式(LINQ)

表达式树

 

初始Lambda表达式

使用C# 2.0中的匿名方法查找“内部包含abc子串的所有字符串”:

第2讲:Lambda表达式

使用C# 3.0中的Lambda表达式查找“内部包含abc子串的所有字符串”:

第2讲:Lambda表达式

 

Lambda表达式简介

第2讲:Lambda表达式

C# 2.0的匿名方法允许我们以内联的方法来实现委托实例,而C# 3.0的Lambda表达式允许我们使用一种更接近人的思维、更自然的方式来实现类似于匿名方法同样的效果。

第2讲:Lambda表达式

 

Lambda表达式格式

Lambda表达式格式为:

(参数列表)=>表达式或者语句块

可以有多个参数,一个参数,或者无参数。参数类型可以隐式或者显式。例如:

第2讲:Lambda表达式

单参数可以省略括号。

x=>x*10 等价于

delegate int MyDeg(int i);

public static int Method1(int i){return x*10;}

{

MyDeg md1=new MyDeg(Method1);

list.FindAll(md1);

}

这个转换的工作是由编译器做的。

第2讲:Lambda表达式

这4种Lambda表达式等价。

 

Lambda表达式格式要点

Lambda表达式的参数类型可以忽略,因为可以根据使用的上下文进行推断。

Lambda表达式的主体(body)可以是表达式,也可以是语句块。

Lambda表达式传入的实参将参与类型推断,以及方法重载辨析。

Lambda表达式和表达式体可以被转换为表达式树。

 

Lambda表达式与委托类型

Lambda表达式L可以被转换为委托类型D,需要满足以下条件:

L和D拥有相同的参数个数。

L的参数类型要与D的参数类型相同。注意隐式类型要参与类型辨析。

D的返回类型与L相同,无论L是表达式,还是语句块。

Lambda表达式并不是表达式,而是一种委托类型的对象。任何匿名方法的应用,都可以写作Lambda表达式。

2010.11.5

相关文章:

  • 2021-07-24
  • 2021-12-26
  • 2022-12-23
  • 2022-01-23
  • 2021-06-10
  • 2021-12-29
  • 2021-12-12
  • 2022-12-23
猜你喜欢
  • 2021-09-20
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2021-06-22
  • 2021-11-22
  • 2021-04-29
相关资源
相似解决方案