测试中的代码分享~将可以合并的方法去合并Func不赖
在面向对象的设计中,我们经常会谈到“重构”,而重构之中有个叫合并方法的,就是将多个方法干的事类似,或者说,方法体的长向很像,那么,我们需要去考虑,将它们进行抽象!
原来的代码:
/// <summary> /// 单数累加 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> static int AddOpreation(int a, int b) { int sum = 0; for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++) { sum += i; } return sum; } /// <summary> /// 乘方累加 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> static int AddInvolutionOpreation(int a, int b) { int sum = 0; for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++) { sum += i * i; } return sum; }
可以看到这两个方法的方法体基本相同 ,只是在累加时第一个是原数累加,第二个方法是原数的乘方作累加,对于上面的代码,我们可以进行再次抽象,将不相同
的代码逻辑提出来,我们知道.net 3.5有了Action和Func两个委托,事实上,这两个委托是微软为我们封装好的,原来就是因为它们常用,所以,人家直接给封装好了,这一点,是值得我们去学习的,有人说,微软的东西升级快,但我要说的是,它的升级不是语言本身的升级,而是为了让开发人员更方便的使用它,让开发人员
的代码写出来更可读,让代码的艺术性更强,这是我想说的。
下面是把变化的部分抽象之后的结果,看代码:
/// <summary> /// 按着某种方法进行累加 /// </summary> /// <param name="func"></param> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> static int BothIntegerOpreation(Func<int, int> func, int a, int b) { int sum = 0; for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++) { sum += func(i); } return sum; }
而在调用的时间,我们将具体的实现逻辑以参数的形式传递进来,有人说,委托用不到,但我想说,那是你对委托还不够了解!
Func<int, int> funcAdd = (a) => { return a; };//以变量的形式定义委托的实例逻辑 int res1 = BothIntegerOpreation(funcAdd, 1, 3); int res2 = BothIntegerOpreation((a) => { return a * a; }, 1, 3);//直接在方法调用时写逻辑 Console.WriteLine(res1.ToString() + res2.ToString());
结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示