c# – 如何提高循环复杂性?

前端之家收集整理的这篇文章主要介绍了c# – 如何提高循环复杂性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于具有大量决策语句(包括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))
{
    ...
}
原文链接:https://www.f2er.com/csharp/96785.html

猜你在找的C#相关文章