【问题标题】:Resharper or CodeRush - change flag from negative to positiveResharper 或 CodeRush - 将标志从负数更改为正数
【发布时间】:2009-09-25 08:56:54
【问题描述】:

我有一个带有否定标志的类(“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)

【问题讨论】:

  • 所以你想重命名一个字段并翻转所有对它的布尔引用?我不知道这两种产品都提供该功能。
  • 是的,这就是我想要的。我继承了一些代码,但它对否定标志没有意义。

标签: resharper coderush


【解决方案1】:

您也许可以在 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)

【讨论】:

  • 谢谢,我可以试试这个。属性只是一个例子,不涉及属性(注解)
  • 是的,一站式解决方案
【解决方案2】:

您可以使用 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

【讨论】:

  • Vadim,感谢您的回答,但上面的代码只是一个示例,并不像上面那样简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2016-08-23
  • 2014-04-12
相关资源
最近更新 更多