2013-03-07 2 views
0

У меня есть код, который выполняет операцию типа слияния, и я использую dynamic/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), который генерирует неадекватно высокие цикломатическую статистику сложности методов, которые используют анонимные методы или динамические тип. Чтобы понять, почему, посмотрите на скомпилированный IL (который анализирует правила FxCop) с помощью декомпилятора, такого как Reflector (но без каких-либо оптимизаций, которые скроют проблематичный сгенерированный код).

Смежные вопросы