2012-08-01 16 views
18

我有一個請求,尋找到與明確指定區分大小寫String.Equals()方法調用替換一個相當大的C#代碼庫中所有字符串==操作用途的可行性。儘管如此,沒有太多的運氣找出一種方法來識別代碼庫中的所有事件。查找用法==操作符在一個大的代碼庫

  • 搜索「==」顯然會發現除被比較的字符串以外的無數個類型實例。
  • 似乎沒有StyleCop規則來找到它。
  • 也不是ReSharper規則。
  • 作爲最後一招我試圖加載組件到JustDecompile和發現的System.String.op_Equality所有用途,但似乎並沒有拿起用途LINQ表達式內如.Where(x => x.StringField == stringField)

所以我有點難倒並想知道是否有人對如何搜索這些討厭的比較有什麼想法?

+4

我會很感興趣的聽到你爲什麼被要求研究這樣的事情。這似乎是一個非常非生產性的使用你的時間.....這是一個「標準文件遵守」的事情? – 2012-08-01 07:20:30

+0

爲什麼搜索「==」會發現除比較字符串以外的其他類型的無數實例?那些其他'類型'是什麼? – 2012-08-01 07:21:47

+0

@NikhilAgrawal如果它們是字符串變量而不是魔術字符串呢? – 2012-08-01 07:23:13

回答

11

您可以使用Resharper查找所有用法。以下是對我有用的東西:

  1. 右鍵單擊代碼中任何位置的字符串類型。點擊轉到聲明
  2. ReSharper的將打開string.cs從.NET框架
  3. 向下滾動到operator ==和鼠標右鍵,選擇查找用法

這需要一些時間,但你會得到一個不錯的列表在樹視圖中排序。 我在VS2010中用Resharper 6.1試過這個。

UPDATE

有一種簡單的方法來做到這一點:

  1. 選擇==在字符串比較
  2. 右鍵單擊該選項,並選擇查找用法高級
  3. 在查找對話框中,只檢查'使用情況'並將範圍設置爲'解決方案'以過濾掉其他庫中的任何引用。
+0

非常好。通過里程擊敗我的答案:) – davenewza 2012-08-01 08:06:31

+0

好的建議。但是,當我在VS2012RC和R#7中嘗試這個操作時,右鍵單擊'operator ==',_Find Usages_選項被禁用。實際上,對於_String.cs_元數據文件中的所有方法,_Find Usages_似乎都被禁用。難道我做錯了什麼? – 2012-08-01 08:22:47

+0

感謝您的提示,但我無法得到這個工作。 「查找用法」(假設這是你的意思,我沒有一個「顯示用法」菜單項),通過掃描我的解決方案中的所有代碼文件,但隨後其結果,它只是給我引用的庫1432個慣例,基本上在整個'System.'命名空間中都掛滿了。沒有從我的代碼。 – Carson63000 2012-08-01 12:07:58

0

我的建議是寫一個非常基本的和具體的代碼分析器通過該系統中的每個範圍橫樑,記錄所有string/String變量聲明和檢測使用這些變量中的任何==比較。

歡迎任何對代碼解析有深入瞭解的人發表評論。我確信有一些可以使用的類/工具。