Подтвердить что ты не робот

Поиск использования оператора string == в большой базе кода

У меня возникла просьба изучить возможность замены всех операторов строки == на достаточно большой С# -кодексе кода с помощью вызовов метода String.Equals(), которые явно указывают чувствительность к регистру.

Не было большой удачи в определении способа выявления всех вхождений в кодовой базе.

  • Поиск "==", очевидно, находит множество экземпляров типов, отличных от сопоставленных строк.
  • Как правило, для этого не существует правила StyleCop.
  • Не правило ReSharper.
  • В крайнем случае я попробовал загрузить сборки в JustDecompile и найти все способы использования System.String.op_Equality, но это, похоже, не вызывает использование внутри выражений LINQ, таких как .Where(x => x.StringField == stringField)

Итак, я немного озадачен и задаюсь вопросом, есть ли у кого-нибудь идеи о том, как искать эти надоедливые сравнения?

4b9b3361

Ответ 1

Вы можете использовать Resharper, чтобы найти все обычаи. Вот что для меня работает:

  • Щелкните правой кнопкой мыши тип строки в любом месте вашего кода. Нажмите "Перейти" в "Декларация".
  • Resharper откроет string.cs из платформы .NET
  • Прокрутите вниз до operator == и щелкните правой кнопкой мыши, выберите "Поиск использования"

Требуется немного времени, но вы получите хороший список обычаев, заказанных в виде дерева. Я пробовал это с помощью Resharper 6.1 в VS2010.

UPDATE

Существует более простой способ сделать это:

  • Выберите == в сравнении строк
  • Щелкните правой кнопкой мыши выбор и выберите "Поиск использования".
  • В диалоговом окне поиска найдите только "Использование" и установите область действия "Решение", чтобы отфильтровать любые ссылки в других библиотеках.

Ответ 2

Могу посоветовать написать простой и специфичный парсер кода, который передает всю область вашей системы, записывая все объявления string/string и обнаруживая любые сравнения == с использованием этих переменных.

Любой, кто имеет более глубокие знания в анализе кода, может комментировать. Я уверен, что есть некоторые классы/инструменты, которые можно использовать.