Resharper或CodeRush - 将标志从负变为正

时间:2009-09-24 23:28:55

标签: resharper coderush

我有一个有负标志的类(“DoNot {Action}”)。我想将此标志更改为正“Do”并更改代码中的所有检查,基本上否定它们。有没有这样的重构?

这是一个例子。如果我将Flage DoNotFilter更改为DoFilter,则查看此标志的所有代码都应相应更改。

public bool DoNotFilter
{get;private set;}

更改为

public bool DoFilter
{get;private set;}

所以

if (attribute.DoNotFilter == true)

需要改为

if (attribute.DoFilter == false)

2 个答案:

答案 0 :(得分: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!");
    }
}

如果您尝试这样做,请务必先检查所有来源控件! :)没有保修!

您还可以删除多余的比较以获取if to:

if (!DoFilter)

答案 1 :(得分:1)

您可以使用Visual Studio查找和替换对话框。要在午餐时按Ctrl + H。

确保选中“使用”复选框,并在下拉列表中选择“正则表达式”。我还会选中“搜索隐藏文字”和“搜索”复选框。

在“查找内容”类型中: <DoNot{:i+}

在“替换为”类型中: Do\1

在所有出现的DoNotXXX中都会删除“Not”。

接下来让替换

if (attribute.DoFilter == true)

if (attribute.DoFilter == false)

如果您关闭了“查找和替换”对话框,请再次按Ctrl + H.

在“查找内容”类型中: <Do{:i+} == true

在“替换为”类型中: Do\1 == false