HTML5技术

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

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

Form1 : Form { public Form1(){InitializeComponent();button1.Click += async (sender, e) = { await DoAsync(); };} async Task DoAsync(){ await Task.Delay( 250 );} } 在 LINQ 中使用 Lambda 许多 LINQ 中的

Form1 : Form { public Form1() { InitializeComponent(); button1.Click += async (sender, e) => { await DoAsync(); }; } async Task DoAsync() { await Task.Delay(250); } }

 

在 LINQ 中使用 Lambda

  许多 LINQ 中的参数都是一种委托类型的参数,如 Func<T, TResult>,可以定义输入参数以及返回类型。博主也发表了多篇关于 LINQ 的文章,你也可以 点击进入目录 。

  public delegate TResult Func<TArg0, TResult>(TArg0 arg0)

 

  Func<int, bool> 表示:int 为输入参数,bool 为返回值。

  Func<int, int, bool> 表示:2个 int 为输入参数,一个 bool 为返回值。

  示例:

  Func<int, bool> myFunc = x => x == 250;   var result = myFunc(1314);

 

  C# 的编译器可以自动推断输入参数的类型,即便是多个输入参数,当然,你也可以选择显式指定。

  var nums = new[] { 2, 5, 0 };   var query = nums.Count(x => x > 2);   var query2 = nums.Count<int>(x => x < 2);

 

  【备注】不要将 => 和 >= 搞错了,前者是 Lambda 运算符,后者是算术比较运算符。

  

Lambda 中的类型推断

  编译器会根据 Lambda 主体、参数的委托类型以及 C# 语言规范和其它等一些因素,对我们所写的 Lambda 进行类型推断。

  在这里,由于源数据是一个 int 数组,即我要查的数据为 IEnumerable<int> 类型,编译器在这里自动推断元素为 int 类型,意味着 Count 方法内的 x 你可以通过 “.” 在 VS 中显示对应 int 类型的属性和方法。

 

Lambda 中的变量使用范围

  我们可以在 Lambda 的主体中引用范围之外的变量。如:

compareNum = 2.5;   var query = nums.Count(x => x == compareNum);

 

Lambda 的特点
  • Lambda 中包含输入参数的数量,必须与委托类型包含的参数数量一致。

  • Lambda 中的每个输入参数,必须都能够通过隐式转换为其对应的委托参数类型。

  • Lambda 中的返回值(如果有),必须能够隐式转换为委托的返回类型。

  •  

    C# 基础回顾系列

      《C# 知识回顾 - 序列化》

      《C# 知识回顾 - 表达式树 Expression Trees》

      《C# 知识回顾 - 特性 Attribute》、《剖析 AssemblyInfo.cs - 了解常用的特性 Attribute》

      《C# 知识回顾 - 委托 delegate》、《C# 知识回顾 - 委托 delegate (续)》

      《C# 知识回顾 - 事件入门》、《C# 知识回顾 - Event 事件》

      《string 与 String,大 S 与小 S 之间没有什么不可言说的秘密》

      《C# 知识回顾 - 你真的懂异常(Exception)吗?》

      《了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数》

      《C# 基础回顾 - 匿名方法》

     

    错误修正

      @likeheart :“半年命” -> “半条命”。详见评论区 10L。

     

     

    【博主】反骨仔

    【原文】 

    【参考】微软官方文档

     

    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

    网友点评
    5