2009-09-24 2 views
1

У меня есть класс с отрицательным флагом («DoNot {Action}»). Я хотел бы изменить этот флаг на положительный «Do» и изменить все проверки кода, в основном отрицая их. Есть ли такой рефакторинг?Resharper или CodeRush - изменить флаг с отрицательного на положительный

Вот пример. Если я изменю флажок DoNotFilter на DoFilter, весь код, который смотрит на этот флаг, должен соответствующим образом измениться.

public bool DoNotFilter 
{get;private set;} 

изменения

public bool DoFilter 
{get;private set;} 

так

if (attribute.DoNotFilter == true) 

нужно изменить на

if (attribute.DoFilter == false) 
+0

Так что вы хотите переименовать поле и переворачивать все логические ссылки на него? Я не знаю ни одного продукта, обеспечивающего эту функциональность. – Godeke

+0

Да, это то, чего я хочу. Я унаследовал некоторый код, и он просто не имеет смысла с отрицательным флагом. – epitka

ответ

2

Вы можете быть в состоянии получить рефакторинга Инлайн недвижимости в ReSharper, чтобы делать то, что вы хотите. Хотя я не уверен, что он будет работать с атрибутами.

Пример:

public bool DoNotFilter 
{ get; private set; } 

public void Foo() 
{ 
    if (DoNotFilter == true) 
    { 
     Console.WriteLine("Aha!"); 
    } 
} 

Теперь измените:

public bool DoFilter 
{ get; private set; } 

public bool DoNotFilter 
{ get { return !DoFilter; } } 

Теперь рефакторинга, рефакторинга DoNotFilter и Встраиваемый собственности:

public void Foo() 
{ 
    if (!DoFilter == true) 
    { 
     Console.WriteLine("Aha!"); 
    } 
} 

Если вы попробуете это, не забудьте проверить все, чтобы контроль источника сначала! :) Никаких гарантий!

Вы также можете удалить избыточную Comparision, чтобы получить, если вниз:

if (!DoFilter) 
+0

Спасибо, я могу попробовать. Атрибут был всего лишь примером, никаких атрибутов (аннотаций) не было. – epitka

+0

BTW. Я предполагаю, что весь код находится в одном решении. – TrueWill

+0

Да, это все в одном решении – epitka

1

Вы можете использовать Visual Studio Найти и Заменить диалоговое окно. Чтобы обедать, нажмите Ctrl + H.

Убедитесь, что установлен флажок «Использовать», а в выпадающем списке выбрано «Регулярное выражение». Я также проверил бы флажки «Поиск скрытого текста» и «Поиск вверх».

В "Найти" Тип: <DoNot{:i+}

В "Заменить" Тип: Do\1

Это удалит "Не" Во всех вхождений DoNotXXX.

Следующая позволяют заменить

if (attribute.DoFilter == true) 

с

if (attribute.DoFilter == false) 

Если вы закрыли Найти и заменить диалоговое окно, нажмите Ctrl + H снова.

В типа "Найти": <Do{:i+} == true

В "Заменить" типа: Do\1 == false

+0

Вадим, спасибо за ваш ответ, но приведенный выше код был всего лишь примером, и это не так прямо, как указано выше. – epitka

Смежные вопросы