欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#基础之Lambda表达式用法实例教程

程序员文章站 2023-12-16 22:54:46
本文以实例形式介绍了c#中lambda表达式的用法,分享给大家供大家参考之用。具体如下: 从委托的角度来看,lambda表达式与匿名方法没有区别。在前面c#基础之匿名方法...

本文以实例形式介绍了c#中lambda表达式的用法,分享给大家供大家参考之用。具体如下:

从委托的角度来看,lambda表达式与匿名方法没有区别。在前面c#基础之匿名方法一文中,我们使用了匿名方法来调用list<t>的findall方法。从c# 3.0开始,在使用匿名方法的地方,完全可以用lambda表达式来代替。lambda表达式的定义方式为:“([参数列表]) => 表达式”。运算符“=>”是一种与赋值运算“=”具有相同优先级的右结合运算符,在英语里读作:“goes to”。

现在回过头来看我们的例子。下面的代码与之前c#基础之匿名方法一文中的代码具有相同的效果:

class program 
{ 
 static void main(string[] args) 
 { 
 list<string> names = new list<string>(); 
 names.add("sunny chen"); 
 names.add("kitty wang"); 
 names.add("sunny crystal"); 
 
 list<string> found = names.findall 
  ( 
  // lambda expression implementation 
  name => name.startswith( 
  "sunny", 
  stringcomparison.ordinalignorecase) 
  ); 
 
 if (found != null) 
 { 
  foreach (string str in found) 
  console.writeline(str); 
 } 
 } 
}

上面的lambda expression implementation在效果上与匿名方法没有任何区别,“=>”左边的name定义了参数(当参数个数为1的时候,圆括号可以省略),“=>”右边定义执行体。由于c# 3.0编译器具有type inference的能力,参数类型与返回值都将由编译器通过上下文判定,因此与匿名方法不同,lambda表达式的参数可以不给定参数类型。当所表示的匿名方法没有任何参数时,lambda表达式也同样可以使用,只需在“=>”左边用一对圆括号表示即可。即:

() => console.writeline("hello!"); 

事实上,“lambda表达式”这一词比较笼统,事实上“=>”运算符既可以表示lambda表达式,也可以表示lambda语句。lambda语句由代码块组成,形式上很像匿名方法。请看下面的例子:

class program 
{ 
 static void main(string[] args) 
 { 
 // lambda 表达式 
 func<int, bool> dele1 = n => n > 10; 
 // lambda 语句 
 func<int, bool> dele2 = (int n) => { return n > 10; }; 
 console.writeline(dele1(16)); 
 console.writeline(dele1(8)); 
 }
}

两种定义方法同样可以正确地输出结果。请注意,当我们希望构建表达式树的时候,情况却完全不同了:

// ok
expression<func<int, bool>> expr1 = n => n > 10;
// error: cannot converted to an expression tree
expression<func<int, bool>> expr2 = (int n) => { return n > 10; };

由此可见,在构建表达式树的时候,不能用lambda语句(带有代码语句的lambda表达式),而应该使用lambda表达式。从这里就可以看出匿名方法与lambda表达式的区别了。

相信本文所述对大家c#程序设计的学习有一定的借鉴价值。

上一篇:

下一篇: