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#的发展趋势,在以后的编程中会越来越多的看到它的身影。 图 王维 文 王维 排版 王维 长按有哪些白癜风医院北京白癜风的最好医院
|