0

我有执行邮件合并类型操作的代码,并且我正在使用动态/ExpandoObject 来组装属性。我这样做而不是构建一个匿名类,因为在邮件合并发生之前,不同的方法会添加属性。代码运行良好。

问题是 Visual Studio 代码分析将 ExpandoObject 上的每个属性集操作评分为 1 点圈复杂度。所以一个简单的线性方法设置一堆没有分支逻辑的属性是得到分数> 25,这是违反此规则的值。

这是我的代码问题,还是代码分析工作方式的问题?

我的代码如下所示:

        dynamic replacementFields = new ExpandoObject();
        replacementFields.time = DateTime.Now();
        replacementFields.url = Request.Url;
        replacementFields.server = Environment.MachineName;
        replacementFields.firstName = "Jeff";

        ... (a bunch more)

        replacementFields.phone = "555-1212";
4

1 回答 1

1

这是 CA1502 规则实施的一个已知问题 ( https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless ),这会为使用匿名方法或动态类型的方法生成不适当的高圈复杂度统计信息。要了解原因,请使用像 Reflector 这样的反编译器(但没有启用任何优化,这会隐藏有问题的生成代码)来查看编译后的 IL(这是 FxCop 规则分析的内容)。

于 2013-03-07T16:00:19.133 回答