zoukankan      html  css  js  c++  java
  • C# 3.0语言增强学习笔记(二)

          前面复习了"隐式类型局部变量","扩展方法","对象和集合初始化器","匿名方法"知识点。见C# 3.0语言增强学习笔记(一)

    这里我们另外复习C# 3.0的其他新特性:Lambda表达式

    初识Lambda表达式:

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

    List.FindAll(
          
    delegate(string s){
          
    return s.Indexof("abc")>0}
    )

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

    List.FindAll(s=>s.IndexOf("abc")>0)

     

    Lambda表达式简介

    为什么Lambda表达式比匿名方法更好?

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

    Lambda表达式格式

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

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

    (x,y)=>x*//多参数,隐式类型=>表达式
    x=>x*10 //单参数,隐式类型=>表达式
    x=>{return x*10//单参数,隐式类型=>语句块
    (int x) => x*10 //单参数,显式类型=>表达式
    (int x) =>{return x*10//单参数,显示类型=>语句块
    ()=>{Console.WriteLine()}//无参数

    注意:

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

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

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

    4.Lambda表达式表达式和表达式体可以被转换成表达式树。

    Lambda表达式与委托类型

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

    1.L和D拥有相同的参数个数

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

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

  • 相关阅读:
    Arraylist和Linkedlist的区别
    list和map的区别
    collection和collections区别
    Linux操作命令(六)
    Linux操作命令(五)
    Linux操作命令(四)
    Linux操作命令(三)
    Linux操作命令(二)
    Linux操作命令(一)
    ProgrammingProjectList-文本操作
  • 原文地址:https://www.cnblogs.com/Charles2008/p/1439167.html
Copyright © 2011-2022 走看看