时间:2019-11-10来源:本站原创作者:佚名

C#函数式编程

实践

什么是函数式编程(FunctionalProgramming)?简而言之,函数式编程就是把一个函数的输入做为另外一个函数的输入,以一种嵌套的方式形成一个调用链。在C#中体现得淋漓尽致的就是Lbmda运算Linq和C#7的Expression-bodied成员。下面我们来看看在C#中是如何进行函数式编程的。

一.实例

1.Lambda运算:

例如求两个集合的并集,要求去除重复元素:

publicIEnumerablestringGetUnion(IEnumerablestringlist1,IEnumerablestringlist2){if(null==list1

null==list2

list1.Count()==0

list2.Count()==0){thrownewArgumentNullException("TheTextVectorcannotbenull!");}//第一种写法:函数形式returnlist1.Where(t=(!list2.Contains(t))).Union(list1.Where(t=(list2.Contains(t)))).Union(list2.Where(t=(!list1.Contains(t))));//第二种写法:常规形式//IEnumerablestringunion1=list1.Where(t=(!list2.Contains(t)));//IEnumerablestringintersection=list1.Where(t=(list2.Contains(t)));//IEnumerablestringunion2=list2.Where(t=(!list1.Contains(t)));//returnunion1.Union(intersection).Union(union2);}

第一种写法是函数形式,它先求第一个集合不在第二个集合的元素,然后再求两个集合的交集,最后求第二个集合不在第一个集合的元素,依次嵌套,前一个的输出作为下一个的输入,并且最重要的是不会改变原有的list1和list2两个集合的元素,而是生成新的集合序列。明显可以看到,函数形式的写法要简洁方便,可读性要比第二种常规式的写法要强。

2.表达式体运算(Expression-bodied):

(1)首先定义实体:注意这里的属性和方法完全和我们以前的写法不一样,全部都是Lbmda运算。

publicclassPerson{privatestring_id;privatestring_firstname;privatestring_lastname;privatestring_sex;privateint_age;publicstringID{get=_id;set=_id=value;}publicstringFirstName{get=_firstname;set=_firstname=value;}publicStringLastName{get=_lastname;set=_lastname=value;}publicstringSex{get=_sex;set=_sex=value;}publicintAge{get=this._age;set=_age=value;}publicvoidSayHello()=Console.WriteLine("Helloeveryone!Iam"+_firstname);publicstringGetFullName()=_firstname+_lastname;publicstringGetOlder(intage)=agethis._age?"Iamyoungerthan"+age.ToString():"Iamolderthan"+age.ToString();}

(2)定义Main函数:

classProgram{staticvoidMain(string[]args){Personperson=newPerson(){ID="1",FirstName="Wang",LastName="XiaoHu",Sex="Male",Age=18};person.SayHello();Console.WriteLine("Myfullnameis:"+person.GetFullName());Console.WriteLine(person.GetOlder(19));Console.Read();}}

(3)输出:

2.总结

函数式编程是结构化编程的一种,是C#的发展趋势,在以后的编程中会越来越多的看到它的身影。

王维

王维

排版

王维

长按







































有哪些白癜风医院
北京白癜风的最好医院

转载请注明原文网址:http://www.helimiaopu.com/cksc/cksc/7560.html

------分隔线----------------------------