2013-03-07 84 views
0

我有执行邮件合并类型操作的代码,并且我使用动态/ ExpandoObject来组装属性。我这样做,而不是建立一个匿名类,因为不同的方法在邮件合并发生之前一路添加属性。代码运行良好。ExpandoObject导致规则违规CA1502:避免过度复杂

问题是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"; 

回答

1

这是一个已知的问题与CA1502新规则的实施(https://connect.microsoft.com/VisualStudio/feedback/details/729236/use-of-dynamic-types-makes-cyclomatic-complexity-almost-meaningless),这对于使用匿名方法或动态类型的方法产生不适当的高圈复杂的统计数据。为了看看为什么,使用Reflector等反编译器(但未启用任何优化,这会隐藏有问题的生成的代码),查看编译的IL(这是FxCop规则分析的内容)。