gpt4 book ai didi

c# - 圈复杂度为 31,这是从哪里来的?

转载 作者:太空狗 更新时间:2023-10-29 20:42:05 26 4
gpt4 key购买 nike

我正在开发一个从 Excel 文件中提取数据的应用程序(我无法访问实际的数据库)并且我编写了一个方法,该方法的唯一功能是从 Excel 电子表格中提取数据,如下所示。

private IEnumerable<SMEntity> ExtractSMData(List<MSExcel.Range> SMData)
{
List<SMEntity> SMEntities = new List<SMEntity>();

foreach (MSExcel.Range Row in SMData)
{
SMEntity entity = new SMEntity();
entity.IncidentNumber = Row.get_Range("K1").get_Value();
entity.SRNumber = Row.get_Range("L1").get_Value();
entity.SRCategory = Row.get_Range("M1").get_Value();
entity.SiebelClientCall = EntityConversions.DateTimeConversion(Row.get_Range("N1").get_Value());
entity.SiebelOpenedDate = EntityConversions.DateTimeConversion(Row.get_Range("O1").get_Value());
entity.IncidentOpenDate = EntityConversions.DateTimeConversion(Row.get_Range("P1").get_Value());
entity.PickedUpBeforeClient = Row.get_Range("Q1").get_Value().ToString().ToLowerCase() == "no" ? false : true;
entity.OutageStartTime = EntityConversions.DateTimeConversion(Row.get_Range("R1").get_Value());
entity.DetectionPoint = EntityConversions.DateTimeConversion(Row.get_Range("S1").get_Value());
entity.SecondsToDetection = EntityConversions.ConvertDetectionTimeToInt(Row.get_Range("T1").get_Value());
entity.OutageEndTime = EntityConversions.DateTimeConversion(Row.get_Range("U1").get_Value());
entity.MTTR = EntityConversions.ConvertMTTRStringToInt(Row.get_Range("V1").get_Value());
entity.RepairedOnTime = Row.get_Range("W1").get_Value().ToString().ToLowerCase() == "no" ? false : true;
SMEntities.Add(entity);
}

return SMEntities;
}

我已经运行了代码分析(我正在使用 Visual Studio 2012 并在 .NET 4.5 中进行开发)并且我有一个 CA1502: Avoid excessive complexity (复制如下)。作为一名初级开发人员(我 17 岁),我尝试使用 MSDN 了解更多相关信息,但是,我对为什么我的圈复杂度为 33 感到有点困惑。

CA1502

Avoid excessive complexity

'Extraction.ExtractSMData(List<Range>)' has a cyclomatic complexity of 33. Rewrite or refactor the method to reduce complexity to 25.

Core.Extraction.cs:104

我可以用我的 quick-ifs(condition ? if_true : if_false,这些叫什么?)看到它可能不好,但我仍然只能看到它为 5。

更新:

圈复杂度现在是 33...

如果我注释掉 entity.IncidentNumber = Row.get_Range("K1").get_Value();复杂度变为 32。我认为 get_Range()get_Value()每个人都有一个,但没关系......

如果我注释掉 entity.RepairedOnTime = Row.get_Range("W1").get_Value().ToString().ToLower() == "no" ? false : true;复杂度变为 28...

get_Range() , get_Value() , quick-if 为 3, do ToString()ToLower()数?

最佳答案

我计算方法本身、foreach 和两个条件运算符的复杂度总共为 4。如果对 get_Range 的 13 次调用中的每一次都值得 +1 复杂度,而对 get_Value 的 13 次调用中每一次都值得 +1 复杂度,那么总复杂度将加起来为 30 (仍然 1 短,但接近)。我不确定为什么这两个函数会增加复杂性,但这似乎是合理的。

尝试删除调用 get_Rangeget_Value 的行之一,看看圈复杂度是否下降到 29。

关于c# - 圈复杂度为 31,这是从哪里来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com