2012-08-01 14 views
18

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

コードベース内のすべての出現を識別する方法を見つけ出すことは大したことはありませんでした。

  • "=="を検索すると、明らかに、比較される文字列以外の種類の無数のインスタンスが検出されます。
  • これを見つけるためのStyleCopルールはないようです。
  • ReSharperルール。私はJustDecompileにアセンブリをロードしSystem.String.op_Equalityのすべての使用を見つけることを試みたが、それは、そのような.Where(x => x.StringField == stringField)

としてLINQ式の内部で使用状況をピックアップしていないようですので、私は少し困惑して最後の手段として

  • これらの厄介な比較をどのように検索するかについて誰かが考えているのだろうか?

  • +4

    私はこのようなことを調べるように求められた理由を聞くことに非常に興味があります。それはあなたの時間のひどく非生産的な使用のようです.....これは "標準文書の遵守"なのでしょうか? –

    +0

    「検索」==「比較している文字列以外の型の無数のインスタンスを見つける理由」?それらの他の 'タイプ'は何ですか? –

    +0

    @NikhilAgrawal文字列変数であり、魔法の文字列でない場合はどうなりますか? –

    答えて

    11

    Resharperを使用すると、すべての用途を見つけることができます。ここで私のために働くもの:

    1. コードの任意の場所で文字列型を右クリックします。 をクリックしてください。という宣言に進みます。
    2. Resharperのはoperator ==と右クリックにダウン.NETフレームワーク
    3. スクロールからstring.csを開き、用途

    を探す選択それは少し時間がかかりますが、あなたは素敵なリストを取得しますツリービューで並べ替えられています。 私はVS2010のResharper 6.1でこれを試しました。 UPDATE

    これを行うための簡単な方法があります

  • 右の選択をクリックして
  • 用途高度を検索]を選択し、文字列の比較で

    1. 選択== findの下のダイアログで、「Useages」のみをチェックし、スコープを「Solution」に設定して、他のlibの参照を除外します。
  • +0

    非常に良い。マイルで私の答えを打つ:) – davenewza

    +0

    良い提案。しかし、VS2012RCとR#7でこれを試して、 'operator =='を右クリックすると、_Find Usages_オプションが無効になります。実際、_Find Usages_は_String.cs_メタデータファイルのすべてのメソッドで無効になっているようです。何か間違っているのですか? –

    +0

    チップをありがとうが、私はこれを動作させることができませんでした。 "Use Usages"(私が "Show Usages"メニュー項目を持っていないことを前提としています)は、ソリューション内のすべてのコードファイルをスキャンしますが、その結果、基本的に 'System.'名前空間全体に飾られています。私のコードからは何もありません。 – Carson63000

    0

    すべてのstring/String変数宣言を記録し、これらの変数を使用して==の比較を検出する、非常に基本的で具体的なコードパーサーをシステムの各スコープに渡すことをお勧めします。

    コード解析に関する詳しい知識があれば誰でもコメントできます。私はそこにいくつかのクラス/ツールがあると確信しています。

    関連する問題