【问题标题】:Automated refactoring to add parameter names to method calls自动重构以将参数名称添加到方法调用
【发布时间】:2014-10-28 20:05:36
【问题描述】:

我正在进行大规模的重构。

我有几十个方法,通过位置参数调用。现在我想通过命名参数调用它们。这些方法存在于多个非继承类中,并且具有相同的名称并且它们的签名不同。示例:

定义

public class Foo
{
    public static Foo Create(int count, string name)
    {
        ...
    }
}

public class Bar
{
    public static Bar Create(string description, bool yesNo, float factor)
    {
        ...
    }
}

我想替换以下调用,来自

public void CreateSomeObjects()
{
    var foo = Foo.Create(123, "foo");
    var bar = Bar.Create("bar", true, 1.23);
}

public void CreateSomeObjects()
{
    var foo = Foo.Create(count: 123, name: "foo");
    var bar = Bar.Create(description: "bar", yesNo: true, factor: 1.23);
}

我使用 Visual Studio Premium 2013 和 Resharper。任何想法如何实现这一目标? (我只是需要一个提示,没有完整的解决方案。)

【问题讨论】:

  • 您找到解决方案了吗?非常感谢...
  • 很遗憾没有。我目前的方法是用Roslyn 重写它。因为我才刚刚开始,所以我暂时不会发布代码。
  • CodeRush 似乎能够插入命名参数(它是一个上下文菜单,您需要手动单击,因此没有自动解决方案)。
  • R# 9(也可能更早)有一个上下文操作来引入参数名称,但是必须在每个调用站点调用它。您想为给定方法的所有调用站点执行此操作吗?
  • 我有 R#9 但我没有看到这个选项。我在哪里可以找到它?是的,我想转换所有呼叫站点。

标签: c# visual-studio refactoring resharper automated-refactoring


【解决方案1】:

问这个问题多年后,我在谷歌搜索时发现了它(因为我处于同样的情况)。

我无法使用 ReSharper,但对我来说,出色的 Roslynator 是解决方案。

您可以通过 VS2017/2019 Extensions and Updates 对话框(搜索“Roslynator”)或通过VS Marketplace 安装它。还有a version which only contains the refactorings,如果出于某种原因您不想安装分析器。

安装扩展并重新启动 Visual Studio 后,您可以右键单击任何方法的第一个参数并选择 Quick Actions and Refactorings...,然后单击 Add argument名称“XXX”(包括尾随参数) 以添加名称(参见下面的屏幕截图)。

它不是完全自动化的(虽然我认为它可能是基于 Roslyn 的),但我已经用它节省了 很多时间。

【讨论】:

  • 它似乎没有出现在构造函数中?但无论如何,我可能会一直安装它。编辑:第一个参数是一个字符串。无法在字符串中单击。在双引号外单击。效果很好,谢谢。
【解决方案2】:

不确定这是否实用,但您可以使用 ReSharper 执行以下操作:

  1. 使用“查找用法”获取所有方法调用位置的列表。
  2. 对于每种用法,双击进入方法。
  3. 然后在代码编辑器中,单击参数值,ReSharper 应该会显示其操作指示器(左边距中的灯泡或锤子)。
  4. 单击操作指示器以显示操作上下文菜单。
  5. 选择“添加参数名称”操作以将参数名称添加到所有参数。
  6. 重复。

【讨论】:

  • 这比听起来容易得多。我只是将命名参数的级别调高为警告,然后在每个函数的第一个参数上,按 ctl+.,回车,就完成了。
  • 请注意,“添加参数名称”操作似乎仅适用于常量参数值(null 或常量值)。然后,您可以选择为调用的所有参数添加名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2011-10-14
相关资源
最近更新 更多