问题
I am in the middle of a big refactoring.
I have dozens of methods, which are called via positional parameters. Now I would like to have them called via named parameters. The methods exist in several, non-inherited classes and have the same name and their signatures differ. Example:
Definitions
public class Foo
{
public static Foo Create(int count, string name)
{
...
}
}
public class Bar
{
public static Bar Create(string description, bool yesNo, float factor)
{
...
}
}
And the following calls I would like to replace, from
public void CreateSomeObjects()
{
var foo = Foo.Create(123, "foo");
var bar = Bar.Create("bar", true, 1.23);
}
to
public void CreateSomeObjects()
{
var foo = Foo.Create(count: 123, name: "foo");
var bar = Bar.Create(description: "bar", yesNo: true, factor: 1.23);
}
I use Visual Studio Premium 2013 and Resharper. Any ideas how to achieve this? (I just need a hint, no complete solution.)
回答1:
Not sure how practical this is but you can do the following using ReSharper:
- Use "Find Usages" to get a list of all method call locations.
- For each usage, double-click to go to the method.
- Then in the code editor, click on a parameter value and ReSharper should show its action indicator (a light bulb or hammer in the left margin).
- Click the action indicator to show the action context menu.
- Select the "Add argument name" action to add parameter names to all parameters.
- Repeat.
回答2:
Years after this question was asked, I found it while Googling (as I'm in the same situation).
I don't have access to ReSharper, but for me, the excellent Roslynator was the solution.
You can install it through the VS2017/2019 Extensions and Updates dialog (search for "Roslynator"), or through the VS Marketplace. There is also a version which only contains the refactorings, if for some reason you don't want the analysers installed.
Once you've installed the extension and restarted Visual Studio, you can right-click the first parameter of any method and select Quick Actions and Refactorings..., then click Add argument name 'XXX' (including trailing arguments) to add in the names (see screen grabs below).
It's not completely automated (although being Roslyn-based I presume it could be), but I've already saved a lot of time with it.
来源:https://stackoverflow.com/questions/25659280/automated-refactoring-to-add-parameter-names-to-method-calls