• Lambda表达式


    “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

    C#表达式编辑

    C#的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:
    形参列表=>函数体
    函数体多于一条语句的可用大括号括起。
     
    在 is 或 as 运算符的左侧不允许使用 Lambda。
    适用于匿名方法的所有限制也适用于 Lambda 表达式。有关更多信息,请参见匿名方法(C# 编程指南)。

    特殊

    下列规则适用于 Lambda 表达式中的变量范围:
    捕获的变量将不会被作为垃圾回收,直至引用变量的委托超出范围为止。
    在外部方法中看不到 Lambda 表达式内引入的变量。
    Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。
    Lambda 表达式中的返回语句不会导致封闭方法返回。
    Lambda 表达式不能包含其目标位于所包含匿名函数主体外部或内部的 goto 语句、break 语句或 continue 语句。
    Lambda表达式的本质是“匿名方法”,即当编译我们的程序代码时,“编译器”会自动将“Lambda表达式”转换为“匿名方法”,如
     
    从而可以知道“Lambda表达式”与“匿名方法”是可以划上等号的,只不过使用“Lambda表达式”输写代码看上去更直观漂亮,不是吗?
    Lambda表达式的语法格式:
    参数列表 => 语句或语句块
    其中“参数列”中可包含任意个参数(与委托对应),如果参数列中有0个或1个以上参数,则必须使用括号括住参数列,如下:
    () => Console.Write("0个参数")
    I => Console.Write("1个参数时参数列中可省略括号,值为:{0}",i)
    (x,y) => Console.Write("包含2个参数,值为:{0}*{1}",x,y)
    而“语句或语句块”中如果只有一条语句,则可以不用大括号括住否则必须使用,如下:
    I => Console.Write("只有一条语句")
    I => { Console.Write("使用大括号的表达式"); }
    //两条语句时必须要大括号
    I => { i++;Console.Write("两条语句的情况"); }
    如果“语句或语句块”有返回值时,如果只有一条语句则可以不输写“return”语句,编译器会自动处理,否则必须加上,如下示例:
    “Lambda表达式”是委托的实现方法,所以必须遵循以下规则:
    1)“Lambda表达式”的参数数量必须和“委托”的参数数量相同;
    2)如果“委托”的参数中包括有ref或out修饰符,则“Lambda表达式”的参数列中也必须包括有修饰符;
    例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class    Test
    {
        delegateintAddHandler(intx,inty);
        staticvoidPrint(AddHandleradd)
    {
        Console.Write(add(1,3));
    }
     
    static void  Main()
    {
        Print((x,y)=>x+y);
        Print((x,y)=>{intv=x*10;returny+v;});
        Console.Read();
    }
    }
    注: 如果包括有修饰符,则“Lambda表达式”中的参数列中也必须加上参数的类型
    3)如果“委托”有返回类型,则“Lambda表达式”的“语句或语句块”中也必须返回相同类型的数据;
    4)如果“委托”有几种数据类型格式而在“Lambda表达式”中“编译器”无法推断具体数据类型时,则必须手动明确数据类型。
  • 相关阅读:
    Web测试与App测试的区别-总结篇
    Shell之基本用法
    Samba服务部署
    Linux基础(3)
    linux基础(2)
    linux基础(2)
    Linux基础(1)
    网络基础及网络协议
    操作系统简介
    计算机基础重要性
  • 原文地址:https://www.cnblogs.com/DTWolf/p/4727465.html
Copyright © 2020-2023  润新知