Поиск использования оператора string == в большой базе кода
У меня возникла просьба изучить возможность замены всех операторов строки ==
на достаточно большой С# -кодексе кода с помощью вызовов метода String.Equals()
, которые явно указывают чувствительность к регистру.
Не было большой удачи в определении способа выявления всех вхождений в кодовой базе.
- Поиск "==", очевидно, находит множество экземпляров типов, отличных от сопоставленных строк.
- Как правило, для этого не существует правила StyleCop.
- Не правило ReSharper.
- В крайнем случае я попробовал загрузить сборки в JustDecompile и найти все способы использования
System.String.op_Equality
, но это, похоже, не вызывает использование внутри выражений LINQ, таких как .Where(x => x.StringField == stringField)
Итак, я немного озадачен и задаюсь вопросом, есть ли у кого-нибудь идеи о том, как искать эти надоедливые сравнения?
Ответы
Ответ 1
Вы можете использовать Resharper, чтобы найти все обычаи. Вот что для меня работает:
- Щелкните правой кнопкой мыши тип строки в любом месте вашего кода. Нажмите "Перейти" в "Декларация".
- Resharper откроет string.cs из платформы .NET
- Прокрутите вниз до
operator ==
и щелкните правой кнопкой мыши, выберите "Поиск использования"
Требуется немного времени, но вы получите хороший список обычаев, заказанных в виде дерева.
Я пробовал это с помощью Resharper 6.1 в VS2010.
UPDATE
Существует более простой способ сделать это:
- Выберите
==
в сравнении строк
- Щелкните правой кнопкой мыши выбор и выберите "Поиск использования".
- В диалоговом окне поиска найдите только "Использование" и установите область действия "Решение", чтобы отфильтровать любые ссылки в других библиотеках.
Ответ 2
Могу посоветовать написать простой и специфичный парсер кода, который передает всю область вашей системы, записывая все объявления string
/string
и обнаруживая любые сравнения ==
с использованием этих переменных.
Любой, кто имеет более глубокие знания в анализе кода, может комментировать. Я уверен, что есть некоторые классы/инструменты, которые можно использовать.