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

 更新时间:2014年09月06日 09:59:29   投稿:shichen2014  
这篇文章主要介绍了C#中Lambda表达式用法,并与之前所述的匿名方法做一比较,详细的讲述了Lambda表达式的定义及具体用法,需要的朋友可以参考下

本文以实例形式介绍了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#程序设计的学习有一定的借鉴价值。

相关文章

  • C# 语言入门基础介绍

    C# 语言入门基础介绍

    这篇文章主要介绍了C# 语言入门基础,c#是一种新式编程语言,不仅面向对象,还类型安全,本教程概述了 C# 8 及更高版本中该语言的主要组件。 下面一起进入文章了解更多的详细内容吧
    2021-12-12
  • C# 中使用 Exceptionless的方法

    C# 中使用 Exceptionless的方法

    这篇文章主要介绍了C# 中使用 Exceptionless的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • C#中使用Split方法拆分字符串实例

    C#中使用Split方法拆分字符串实例

    这篇文章主要介绍了C#中使用Split方法拆分字符串实例,本文给出了使用一个分隔符和多个分隔符拆分字符串的例子,需要的朋友可以参考下
    2014-08-08
  • C# GetField方法的应用实例讲解

    C# GetField方法的应用实例讲解

    C#中的GetField是一个反射方法,用于获取指定类型的字段信息,它可以通过字段名称来获取字段对象,并且可以在运行时动态地访问和操作这些字段,本文给大家介绍了C# GetField方法的应用,需要的朋友可以参考下
    2024-04-04
  • C#给图片添加水印完整实例

    C#给图片添加水印完整实例

    这篇文章主要介绍了C#给图片添加水印的方法,以完整实例形式分析了C#实现文字及图像水印、缩略图、图片剪切等相关技巧,需要的朋友可以参考下
    2015-12-12
  • C# 格式化字符首字母大写的方法

    C# 格式化字符首字母大写的方法

    这篇文章介绍了C# 格式化字符首字母大写的方法,有需要的朋友可以参考一下
    2013-08-08
  • Win10下C# DateTime出现星期几问题的解决方法

    Win10下C# DateTime出现星期几问题的解决方法

    这篇文章主要介绍了Win10下C# DateTime出现星期几问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • C# 常用日期时间函数(老用不熟)

    C# 常用日期时间函数(老用不熟)

    C# 常用日期时间函数(老用不熟) ,需要的朋友可以参考下。
    2009-09-09
  • 解析StreamReader与文件乱码问题的解决方法

    解析StreamReader与文件乱码问题的解决方法

    本篇文章是对StreamReader与文件乱码问题的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#常用数据结构和算法总结

    C#常用数据结构和算法总结

    这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。
    2016-06-06

最新评论