18

==かなり大規模な C# コードベースで使用されているすべての文字列演算子を、String.Equals()大文字と小文字の区別を明示的に指定するメソッド呼び出しに置き換えることの実現可能性を調査するように依頼されました。

ただし、コードベース内のすべてのオカレンスを特定する方法を見つけ出すには、あまり運がありませんでした。

  • 「==」を検索すると、明らかに、比較対象の文字列以外の型の無数のインスタンスが見つかります。
  • これを見つけるための StyleCop ルールはないようです。
  • ReSharper ルールでもありません。
  • 最後の手段として、アセンブリを JustDecompile にロードして、のすべての使用箇所を見つけようとしましSystem.String.op_Equalityたが、次のような LINQ 式内の使用箇所を検出していないようです。.Where(x => x.StringField == stringField)

だから私は少し困惑しており、誰かがこれらの厄介な比較を検索する方法についてアイデアを持っているかどうか疑問に思っていますか?

4

2 に答える 2

11

Resharper を使用して、すべての使用法を見つけることができます。これが私にとってうまくいくものです:

  1. コード内の任意の場所で文字列型を右クリックします。[宣言に移動] をクリックします。
  2. Resharper は .NET フレームワークから string.cs を開きます
  3. 下にスクロールしてoperator ==右クリックし、[使用箇所の検索] を選択します。

少し時間がかかりますが、ツリー ビューで並べられた使用箇所の優れたリストが表示されます。VS2010のResharper 6.1でこれを試しました。

アップデート

これを行う簡単な方法があります。

  1. ==文字列比較で選択
  2. 選択範囲を右クリックし、使用箇所の検索の詳細を選択します
  3. 検索の下のダイアログで、「使用法」のみをチェックし、スコープを「ソリューション」に設定して、他のライブラリの参照を除外します。
于 2012-08-01T08:03:39.553 に答える
0

string私のアドバイスは、システム内の各スコープを横断し、すべての/String変数宣言を記録し、==それらの変数を使用して比較を検出する、非常に基本的で具体的なコードパーサーを作成することです。

コード解析についてより深い知識を持っている人は誰でもコメントを歓迎します。使用できるクラス/ツールがいくつかあると確信しています。

于 2012-08-01T07:46:05.733 に答える