c# – 如何提高循环复杂性?
发布时间:2020-12-15 17:44:15 所属栏目:百科 来源:网络整理
导读:对于具有大量决策语句(包括if / while / for语句)的方法,Cyclomatic Complexity将很高.那么我们如何改进呢? Cos我正在处理一个大项目,我应该减少CC的方法有CC这个问题有许多方法.下面我会列出一些例如代码模式(而不是实际的代码)与我遇到的问题.是否可以简
对于具有大量决策语句(包括if / while / for语句)的方法,Cyclomatic Complexity将很高.那么我们如何改进呢?
Cos我正在处理一个大项目,我应该减少CC的方法有CC>这个问题有许多方法.下面我会列出一些例如代码模式(而不是实际的代码)与我遇到的问题.是否可以简化它们? 导致许多决策声明的案例示例: 情况1) if(objectA != null) //objectA is a pass in as a parameter { objectB = doThisMethod(); if(objectB != null) { objectC = doThatMethod(); if(objectC != null) { doXXX(); } else{ doYYY(); } } else { doZZZ(); } } 案例2) if(a < min) min = a; if(a < max) max = a; if(b > 0) doXXX(); if(c > 0) { doYYY(); } else { doZZZ(); if(c > d) isTrue = false; for(int i=0; i<d; i++) s[i] = i*d; if(isTrue) { if(e > 1) { doALotOfStuff(); } } } 情况3) //note that these String Constants are used elsewhere as diff combination,//so u can't combine them as one if(e.PropertyName.Equals(StringConstants.AAA) || e.PropertyName.Equals(StringConstants.BBB) || e.PropertyName.Equals(StringConstants.CCC) || e.PropertyName.Equals(StringConstants.DDD) || e.PropertyName.Equals(StringConstants.EEE) || e.PropertyName.Equals(StringConstants.FFF) || e.PropertyName.Equals(StringConstants.GGG) || e.PropertyName.Equals(StringConstants.HHH) || e.PropertyName.Equals(StringConstants.III) || e.PropertyName.Equals(StringConstants.JJJ) || e.PropertyName.Equals(StringConstants.KKK)) { doStuff(); } 解决方法
案例1 – 通过重构到较小的功能来处理这一点.例如.以下代码段可能是一个函数:
objectC = doThatMethod(); if(objectC != null) { doXXX(); } else{ doYYY(); } 案例2 – 完全一样的做法.将else子句的内容转换为较小的帮助函数 情况3 – 列出您要检查的字符串,并创建一个小型帮助函数,将字符串与许多选项进行比较(可以使用linq进一步简化) var stringConstants = new string[] { StringConstants.AAA,StringConstants.BBB etc }; if(stringConstants.Any((s) => e.PropertyName.Equals(s)) { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |