Lambda简化C#编程学习心得

开发 后端
用Lambda表达式可以简化C#编程,用法非常灵活。但是代码不太容易掌握,下面就跟我一起来学习一下吧。

下边是我学Lambda表达式的一点记录。

1、Lambda表达式是与委托紧密联系的。只要有委托参数类型的地方,就可以使用Lambda表达式。

Lambda表达式的运算符是=>。运算符左边列举出了需要的参数,右边定义了赋予Lambda变量的方法的实现代码。下面这段代码是一个最简单的使用方法

  1. public class MyLambda{    public void disPlay()      
  2. {        string mid = ",middle part,";          
  3. Func<string, string> lambda = param =>              
  4. {                param += mid;                param   
  5. += "and this was added to the string";                  
  6. return param;            };        Console.WriteLine  
  7. (lambda("Start of string"));    }}  

Func<string, string>是一个委托类型。包含两个参数:一个输入的string和一个输出的string.

parm是输入参数,所以他的类型可以认为是string类型的(当然很多地方会出现没有名字的类型的)。

运算符=>右边表示一个方法,这个方法没有名字。这个方法赋予了变量lambda。

在本例中,通过Console.WriteLine(lambda("Start of string"));向lambda方法传递参数“Start of string”.经处理后会有这样的输出:

Start of string,middle part,and this was added to the string。

所以我想这样理解:Lambda表达式表示是一个函数的另一种写法。运算符=>左边是输入,右边是函数体。函数体需不需要返回值,由接收这个函数定义的lambda表达式的委托决定。

2、Lambda表达式的参数。

lambda表达式如果只有一个参数,只写出参数名就行了。下边的lambda表达式使用了参数s,因为委托类型定义了一个string类型。所以s的类型就是string。实现函数体的代码调用了String.Format()方法返回一个字符串,在调用委托是就直接把字符串输出了:

 

  1. Func<stringstring> oneParam = s =>    {        return   
  2. String.Format("Change To UpperCase {0}", s.ToUpper  
  3. ());    };  
  4. Console.WriteLine( oneParam("abc"));  

注:Func<string,string>是一个系统定义的带有一个输入和一个输出的委托。

如果委托有多个参数,就要把参数放到括号中,如下:

 

  1. Func<doubledoubledouble> twoParam = (x, y) =>      
  2. {        return x * y;    }; 

 

3、单行代码和多行代码

如果Lambda表达式只有一条语句,在方法块内就不需要花括号和return语句了,编译器会自动添加一条隐式的return语句。如上边的两个表达式可以分别表示为:

 

  1. Func<stringstring> oneParam = s => String.Format  
  2. ("Change To UpperCase {0}", s.ToUpper());Func<double,   
  3. doubledouble> twoParam = (x, y) => x * y;  

 

但是如果Lambda表达式实现代码需要多条语句时,就必须添加花括号和return语句了。如***个例子的代码。

4、Lambda表达式的外部变量

Lambda表达式可以使用外部变量。但使用时应该注意些问题:

先看下边的代码:

 

  1. int someVar = 5;Func<intint> f = x => x +   
  2. someVar;someVar = 10;Console.WriteLine(f(5)); 

 

输出应该是x+5还是x+10呢?运行下发现输出15(x+10).即修改外部变量someVar后,会使用外部变量的新值。

对于表达式x => x + someVar; 编译器会创建一个匿名类,他有一个构造函数来传递外部变量。该构造函数取决于从外部传递过来的变量个数。对于上边这个例子,我们可以认为构造函数接受一个int,匿名类包含了一个匿名方法,其实现代码和返回类型有lambda表达式定义:

 

  1. public class AnonymousClass{    private int someVar;      
  2. public AnonymousClass(int someVar)    {          
  3. this.someVar = someVar;    }    public int   
  4. AnonymousMethod(int x)    {        return x +   
  5. someVar;    }} 

 

使用Lambda表达式时,调用该方法(AnonymousMethod(int x)),会创建匿名类的一个实例(相当于new AnonymousClass(somevar)),并传递调用该方法时的变量的值。

Lambda简化C#编程学习心得就先写到这里了,希望对大家有帮助。

【编辑推荐】

  1. 细说针对C#中的Lambda表达式优化
  2. 详解C#委托、时间和Lambda表达式
  3. Lambda表达式动态函数编程:更加灵活强大
  4. Lambda表达式
  5. 详解C#基础之委托异步
  6. C#常用线程同步方法应用场景和实现原理
责任编辑:佚名
相关推荐

2009-08-18 10:59:46

C#枚举类型

2009-08-13 18:10:31

C#静态构造函数

2009-09-17 13:38:42

LINQ to XML

2011-04-06 11:08:52

Java异常

2009-11-06 17:31:03

Oracle密码文件

2012-06-27 14:04:22

folly

2009-06-23 09:05:10

Seam框架JSF

2009-12-22 15:49:50

Linux系统文件锁

2009-08-26 16:17:23

C# Lambda表达

2009-09-14 18:19:49

LINQ模糊查询

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口转换

2009-09-01 16:12:41

C#命名指南

2009-09-10 16:35:06

CCNA考试培训

2009-07-15 18:11:17

MVC模式学习

2009-09-14 13:44:14

Lambda ExprC# Lambda

2009-08-14 15:54:12

C#编程语言

2009-08-25 16:32:24

C#语言

2009-08-24 10:06:31

C#接口成员

2009-08-26 17:22:09

C#语言
点赞
收藏

51CTO技术栈公众号