赞
踩
函数式编程,简单来理解,就是把函数当成是组成一个功能模块最小的单位。相对于之前接触的面向对象的思想,把类对象当成一个功能模块的组成部件,在函数式编程中把函数也当成一个可拆卸的对象。
Labmda也称作匿名函数,在C#中我们通过一个简单的符号”=>”即可定义一个lamda表达式,下面分别针对不同的=>的使用方法进行总结:
- Func<int, int, int> add =(x, y) => x + y;
- int r = add(1, 2);
我们通过了=>构建了一个匿名函数,并将其赋值给变量add,以后我们就可以把add当成函数来使用了。=>前面的部分表示构建匿名函数的参数列表,后面部分表示函数的返回值。我们构建的函数中接收想x、y两个整形的参数,返回x+y两个参数的和。
当=>前面的参数列表为空时,我们可以构建一个不带参的匿名函数:
- Func<int>func = () => 123;
- Console.WriteLine(func());
我们也可以使用=>构建无返回值的函数,但是此时要求=>后面必须是一个完整的表达式,并且我们需要用Action函数模板才能接受:
- Action<int>print = x => Console.WriteLine(x);
- print(456);
用=>表达式构建的匿名函数还可以返回另外一个匿名函数,比如下面的例子:
- Func<int, Func<int, int>> add2= x => y => x + y;
- r = add2(2)(8);
- Console.WriteLine(r);
为了便于分析我们可以将=>有部分用()括起来:
Func<int, Func<int, int>> add2= x =>( y => (x + y));
这样就很清晰的看出来整个=>表达式的结构,外层的=>左边为匿名函数接收的参数x,内右边为其返回的结果,仍然是一个=>表达式。内层的=>表达式接收一个参数y作为参数,返回x+y的结果。我们可以按照上面的例子调用嵌套的=>表达式,也可以将外层的=>先声明为一个函数对象,在按照内层=>的格式进行调用:
- var add3= add2(3);
- Console.WriteLine(add3(0));
- Console.WriteLine(add3(1));
上面的例子,我们声明了一个函数对象add3并赋值add2(3),这样在以后我们使用add3传入任何参数时,都会在该参数的基础之上加3并进行返回。
Github位置:
https://github.com/HymanLiuTS/CSGroup
克隆本项目:
git clone git@github.com:HymanLiuTS/ CSGroup.git
获取本文源代码:
git checkout CSL02
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。