2013-03-07 83 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規則分析的內容)。