1

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

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

public bool DoNotFilter
{get;private set;}

更改为

public bool DoFilter
{get;private set;}

所以

if (attribute.DoNotFilter == true)

需要更改为

if (attribute.DoFilter == false)
4

2 回答 2

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 属性:

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

如果您尝试此操作,请务必先将所有内容检查到源代码管理中!:) 没有保证!

您还可以删除多余的比较以将 if 降低到:

if (!DoFilter)
于 2009-09-25T00:48:10.267 回答
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

于 2009-09-25T00:51:29.813 回答