HTML5技术

[C#] C# 知识回顾 - Lambda - 反骨仔(二五仔)

字号+ 作者:H5之家 来源:H5之家 2017-01-16 15:01 我要评论( )

C# 知识回顾 - Lambda序 它是第十一个希腊字母,一个拥有失意、无奈、孤独、低调等含义的流行符号,也指示一款称为半条命的游戏。 不过,这次我所讲的是 C# 中的 Lambda。 目录 Lambda 简介 Lambda 表达式,是一种简化的匿名函数,可用于创建委托或表达式目录

C# 知识回顾 - Lambda 序

  它是第十一个希腊字母,一个拥有失意、无奈、孤独、低调等含义的流行符号,也指示一款称为“半条命”的游戏。

  不过,这次我所讲的是 C# 中的 Lambda。

 

目录

 

Lambda 简介

  Lambda 表达式,是一种简化的匿名函数,可用于创建委托或表达式目录树。其次,你也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。我们经常在 LINQ 中使用 Lambda 表达式。

  创建 Lambda 表达式的简单语法形式输入参数 => 表达式或语句块。其中,=> 为 Lambda 运算符,可读作“goes to” 。

delegate int MyDel(int x); static void Main(string[] args) { MyDel myDel = x => x++; var j = myDel(5); }

 

  创建表达式树:

  Expression<MyDel> myDel = x => x++;

 

  => 运算符和 = 运算符 (赋值运算符),具有相同的优先级,并且都是右结合运算。

  我们经常在 LINQ 查询中使用 Lambda 表达式,如作为 Where<TSource> 的参数。该方法有多个重载,这里只列举了其中一个。

摘要: 3 // 基于谓词筛选值序列。 参数: 6 // source: 7 // 要筛选的 System.Collections.Generic.IEnumerable<T>。 predicate: 10 // 用于测试每个元素是否满足条件的函数。 类型参数: 13 // TSource: 14 // source 中的元素的类型。 返回结果: 17 // 一个 System.Collections.Generic.IEnumerable<T>,包含输入序列中满足条件的元素。 异常: 20 // System.ArgumentNullException: IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

 

  参数是委托类型 Func<TSource, bool> predicate),这里使用 Lambda 表达式进行创建我想应该是最合适的。还有,假如参数类型为抽象类的 System.Linq.Expressions.Expression<Func>,其中 Func 委托是重载具有十六个参数的,你也可以使用 Lambda 表达式创建对应的表达式树。

  【注意】在 is 或 as 运算符的左侧不允许使用 Lambda 表达式。

 

Lambda 表达式

  表达式在 => 运算符右侧,称“lambda 表达式”。lambda 表达式常用于 LINQ 和构建表达式树,它也允许返回结果。

  基本形式:( 输入参数 ) => 表达式

  如:  

  ( ) => true;
   x => x == 1;   (x) => x == 1;   (x, y) => x == y;

 

  【备注】当 lambda 表达式有且只有一个输入参数的时侯,括号(“()”)才是可选的。 括号内存在多个输入参数时使用“,”进行分割。

 

  你也可以选择显式指定类型,一般只有在编译器难以或无法准确推断输入类型的时候。

  Func<int, int, bool> func = (int x, int y) => x == y;

 

  这里使用空括号(“()”)指定零个输入参数,并且可以在 Lambda 的主体包含一个或多个方法进行调用。

  () => YourMethod()

 

Lambda 语句

  lambda 语句和上面的 lambda 表达式相比,只是多了个大括号(“{ }”)。  

  基本形式:( 输入参数 ) => { 表达式 }

 

  lambda 语句的主体可以由任意数量的普通语句组成,不过,我们一般写的语句不多(三个左右吧)。

delegate void MyDel(string s); // ... MyDel myDel = n => { ; Console.WriteLine(s); }; myDel();

 

异步 Lambda

  通过 async 和 await 关键字,我们可以很简单并快速的创建包含异步处理的 lambda 表达式和语句。博主发表了约 8 篇关于异步的文章,你可以 点击进入目录 。

  这里,我使用简单的异步调用方式,编写执行按钮触发的点击事件,即调用异步方法 DoAsync。

Form1 : Form { public Form1() { InitializeComponent(); } button1_Click(object sender, EventArgs e) { await DoAsync(); } async Task DoAsync() { await Task.Delay(250); } }

  

  现在,简化上面的的 Click 事件,并加上 async。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5 与 CSS3 jQuery部分知识总结 - 细数逝去的过往

    HTML5 与 CSS3 jQuery部分知识总结 - 细数逝去的过往

    2016-12-12 15:00

  • 移动WEB viewport 相关知识 - starof

    移动WEB viewport 相关知识 - starof

    2016-12-07 13:00

  • 移动WEB像素相关知识 - starof

    移动WEB像素相关知识 - starof

    2016-11-30 10:00

  • 前端面试知识 - 凌晨仨点来看妳

    前端面试知识 - 凌晨仨点来看妳

    2016-10-25 13:00

网友点评
=