问题描述
publicboolCheckA(Func<bool>func){if(Role==10)returntrue;if(func!=null)returnfunc();returnfalse;}publicboolCheckB<T>(Tentity,Func<T,bool>func){if(Role==10)returntrue;if(func!=null)returnfunc(entity);returnfalse;}publicvoidEdit(intid=0){varentity=typeService.Get(1);varaa=CheckA(()=>{returnentity.CreateUser==2;});varbb=CheckB<SetKv>(entity,(t)=>{returnt.CreateUser==2;});}
解决方案
解决方案二:
不必奢谈什么“最好”的专门引起争议的字眼儿,仅仅说基本的原则然后让人自己去判断。假设注释一段代码,你的软件仍然通过测试,那么这段代码其实就是多余的,放一段时间之后如果还是如此就应该删除掉这些垃圾代码了。我们编程中自然是希望越简单越好,越少定义类型和接口越好,越少写代码越好,越简单地记忆业务逻辑越好。绝不是为了技术而编程的。因此一个东西是不是多余的,首先看你能不能给出必要性的测试来。如果你发现两个东西只要保留一个就够了,没有更多的测试支持另一个的存在,那么你自然就是选择一个看起来麻烦、太技术化的东西,先删除它。
解决方案三:
我们讨论技术,总是同时讨论需求。绝不是为了炫技而盲目罗列垃圾代码的。而需求往往在于你自己,不要让别人给你需求。
解决方案四:
参数不一样,CheckB支持匿名类型判断。
解决方案五:
这不是很明显吗,你给checkA或B传递的方法,有输入参数的就用B,没有的就用AFunc<T,bool>匿名委托,前面的T,是指输入参数的类型;Func<bool>表示没有输入参数
解决方案六:
引用2楼sp1234的回复:
我们讨论技术,总是同时讨论需求。绝不是为了炫技而盲目罗列垃圾代码的。而需求往往在于你自己,不要让别人给你需求。
我对这两种的差异不了解,下面的这种写法有点像闭包,如果不弄清差异,怎么知道在以后的场景中用那种更合适?不懂就问,不丢人varaa=CheckA(()=>{returnentity.CreateUser==2;});