3.7 lambda表达式
lambda表达式是一个可用于创建委托或表达式树类型的匿名函数。通过使用lambda表达式,可以写入作为参数或返回为函数调用值的本地函数。lambda简化了开发中需要编写的代码量,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。
3.7.1 理解lambda表达式
对于C# lambda的概念前面介绍了,现在作为Delegate方式进行使用,C# lambda表达式使代码简洁,那么依托外部条件如何动态构建C# lambda表达式呢?下面先用简单代码初步描述表达式的意义,代码如下。
调用代码如下,首先调用了对象的方法,然后获得对象中的值,最后输出这些值,代码如下。
调用方法输出结果如图3-21所示。
图3-21 调用方法后对象的值发生改变
3.7.2 剖析lambda表达式
上面示例简单演示了lambda表达式的概念,下面详细剖析Lambda表达式的结构。简单C# lambda表达式的构成如下。
i => i > 5
“i”被称为Parameter,“i > 5”是Body,可以对Body进一步分解,那么“i > 5”分别包含参数(i)、操作符(>)及一个常数(5)。所有这些通过特定顺序的组合,构建一个完整的Lambda表达式。
下面实例演示如何动态地构建C# lambda表达式。
前面简单介绍了几种lambda表达式,下面介绍lambda表达式中使用到的多语句块。
3.7.3 在lambda中使用多语句块
为了更好地理解lambda表达式,在原来的代码中修改了部分程序,并添加了部分代码,如下所示。
在上面的代码中定义了一个模板类,在类中添加了一个泛类的集合和一个构造函数。构造函数中对泛类的集合做了添加等操作,并且使用lambda表达式的赋值方式为泛合重新赋值。
3.7.4 多参数的lambda表达式
下面代码为lambda表达式添一个参数。
这里首先定义一个委托类型,这个委托类型需要一个学生姓名为参数,在删除学生时传递一个学生姓名为参数,在调用时可以直接传递一个字符串的参数过去,如果没有参数可以用空格表示,在上面的示例中也可以不使用委托传递参数,这样比较简洁。