Resharper или CodeRush - изменить флаг с отрицательного на положительный

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

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

public bool DoNotFilter
{get;private set;}

изменения к

public bool DoFilter
{get;private set;}

so

if (attribute.DoNotFilter == true)

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

if (attribute.DoFilter == false)

person epitka    schedule 24.09.2009    source источник
comment
Итак, вы хотите переименовать поле и перевернуть все логические ссылки на него? Я не знаю ни одного из продуктов, обеспечивающих такую ​​функциональность.   -  person Godeke    schedule 25.09.2009
comment
Да вот чего я хочу. Я унаследовал некоторый код, и это просто не имеет смысла с отрицательным флагом.   -  person epitka    schedule 25.09.2009


Ответы (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 и Inline Property:

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

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

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

if (!DoFilter)
person TrueWill    schedule 25.09.2009
comment
Спасибо, я могу попробовать это. Атрибут был всего лишь примером, без атрибутов (аннотаций) - person epitka; 25.09.2009
comment
Да, все в одном решении - person epitka; 25.09.2009

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

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

В поле «Что найти» введите: <DoNot{:i+}.

В поле «Заменить на» введите: Do\1

Он удалит "Not" во всех случаях DoNotXXX.

Затем позвольте заменить

if (attribute.DoFilter == true)

с участием

if (attribute.DoFilter == false)

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

В поле «Найти что» введите: <Do{:i+} == true.

В поле «Заменить на» введите: Do\1 == false.

person Vadim    schedule 25.09.2009
comment
Вадим, спасибо за ответ, но приведенный выше код был всего лишь примером, и он не такой простой, как выше. - person epitka; 25.09.2009