是否LINQ和Lambda表达式减少圈复杂?只是好奇因为实际上的CodeRush表示cc的减少当VS分析器增加它。

有帮助吗?

解决方案

我怀疑的差异可能是由于延迟执行。当您使用LINQ与lambda表达式,你指定将要运行的代码的如果的你然后遍历集合。

我个人我不那么担心圈复杂,但我绝对相信,(如果使用得当)LINQ提高了可读性。这就是我的真正的关心:)

其他提示

我只是同样的问题来到身边,事实上,拉姆达可增加圈复杂度。的我做了试验,并在哪里()子句可以增加它明智。

可读性的确是你的首要任务之一。

但它没有把我长以取代得到一些LINQ查询(),它使用相同的数据和额外的好处给我提供的方法。


我把我的FxCop在我的构建/发布脚本,所以我从来没有达到25的目标圈复杂部署的东西。

这是艰难的,但我认为这是值得的。

这给予我一些点在讨论时,我的队友们都配备了非常糟糕的代码,他说: 这部作品,这是最重要的。


我的提示是:保持低于25的圈复杂度 这可能会帮助你保持每个方法足够简单为好维护。

乔恩斯基特非常简洁地回答了这个问题。我想补充的是,在我与高级语言如C#经验,测量圈复杂度的值,因为这句法糖包,比如LINQ增加发展的价值减少了。

在过去的十年里,作为语言的演变,许多在网络上已经说明了圈复杂度和代码行之间存在很强的相关性,使许多人的问题,多大的价值这样的措施其实是多么带来的。另一种方式来看这将是作为CC代码质量的量度的贬值实际上是可读性的重要性的断言,作为一个通常是另一个的逆。

例如,如果我把一个条件foreach循环内,条件被评估为我的代码,和代码路径的适当的数量进行计数。在另一方面,如果我申请一个功能树的集合,我遍历(例如在(evalStr => evalStr == origStr)我在移动条件的循环外,进入编译器生成的代码。有还是一样的分支数,但是条件等都很不循环的一部分,但在CC增加超出了foreach循环,以“惩罚”的实际枝数的顶部使用匿名方法(lambda表达式和委托)。该当功能让我预处理迭代集合,以便只迭代循环,如果需要的地方。

但是,代码是远远地更具有可读性。

最后,如果一个决定某一LINQ的IQueryable函数内部中使用的布尔表达式不需要进行单元测试,表面上是因为,如果有一个例外,它是一个高阶(又名业务级)异常(错误值被测试,操作者错误,错误的操作数,等等),而不是一个低于理想使用的语言(使用开关代替如果,如果代替三元等),那么测量圈复杂度应该考虑到这一点: A式()函数不应该增加我的CC。测量圈复杂度将不利于做出更好的代码;如果有的话,它会人为地增加开发者的,以简化在没有简化可能是必要的或期望的倾向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top