gpt4 book ai didi

c# - 动态关键字导致 Visual Studio 2010 代码分析中的圈复杂度 > 25

转载 作者:太空狗 更新时间:2023-10-30 01:24:07 24 4
gpt4 key购买 nike

我有一段代码与此类似:

dynamic a = new ValueHolder();
dynamic b = new ValueHolder();
dynamic c = new ValueHolder();

a.MtdActual = b.MtdActual + c.MtdActual;
a.YtdActual = b.YtdActual + c.YtdActual;
a.MtdVariance = b.MtdVariance + c.MtdVariance;

我创建这个是为了举例,根据代码分析,那段代码的圈复杂度是 25。

在反汇编 IL spy 中的代码时,您可以看到:

object a = new ValueHolder();
object b = new ValueHolder();
object c = new ValueHolder();
if (Program.<ConsumeA>o__SiteContainer2.<>p__Site3 == null)
{
Program.<ConsumeA>o__SiteContainer2.<>p__Site3 = CallSite<Func<CallSite, object, object, object>>.Create(Binder.SetMember(CSharpBinderFlags.None, "MtdActual", typeof(Program), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)
}));
}
Func<CallSite, object, object, object> arg_159_0 = Program.<ConsumeA>o__SiteContainer2.<>p__Site3.Target;
CallSite arg_159_1 = Program.<ConsumeA>o__SiteContainer2.<>p__Site3;
object arg_159_2 = a;
if (Program.<ConsumeA>o__SiteContainer2.<>p__Site4 == null)
{
Program.<ConsumeA>o__SiteContainer2.<>p__Site4 = CallSite<Func<CallSite, object, object, object>>.Create(Binder.BinaryOperation(CSharpBinderFlags.None, ExpressionType.Add, typeof(Program), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)
}));
}
...

我的问题显然是 if else 和编译器生成的逻辑正在增加复杂性。但是,如果可能的话,如何将代码分析配置为不在此级别上运行,而是在更简单的编码(预编译)阶段作为第一个代码片段进行评估?

最佳答案

the cyclomatic complexity of that piece of code according to Code Analysis is 25

对于仅包含该代码的方法,我得到 13。您使用的是哪个版本的 Visual Studio,您的目标是哪个 .NET Framework 版本?

My question is clearly the if else and compiler generated logic is increasing the complexity.

是的,编译器正在注入(inject)增加复杂性的指令。这不是它这样做的唯一场景。 (使用匿名方法是另一个众所周知的CC被“增强”的场景。)

But how can I configure Code Analysis to not operate on this level and rather to evaluate on the simpler coded (pre compilation) stage as the first code snippet, if even possible?

这是不可能的。 Visual Studio Code Analysis 和 Code Metrics 使用的计算引擎(本质上是同一个小动物)仅分析已编译的 IL。他们从不查看源代码。

如果您希望解决指标计算错误,您应该考虑在 https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless 上对错误报告进行投票.

关于c# - 动态关键字导致 Visual Studio 2010 代码分析中的圈复杂度 > 25,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296842/

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