I want to use a Resharper structural search and replace template to automatically replace examples of this:
new Fruit { Name = "Apple", IsTasty = true }
With this:
new Fruit("Apple", true)
(Note, the required constructor already exists)
I've tried various combinations like this:
new $type$ { Name = $name$, IsTasty = $isTasty$ };
...using various different Placeholder types, but R# doesn't find any of the examples in my code. Has anyone done this before?
So I just did this in resharper (9.0.2 I think)
Create pattern: FruityChange
- new $type$ { Name = $param1$, IsTasty = $param2$ }
- $type$ is a type
- $param1$ is an expression of type string
- $param2$ is an expression of type bool
- Pattern Severity "Show as error"
with class Fruit
public class Fruit
{
public Fruit(string name, bool isTasty)
{
Name = name;
IsTasty = isTasty;
}
public string Name { get; set; }
public bool IsTasty { get; set; }
}
And that underlined the expression in the code editor and alt-tab gave me the "Replace With" option for it. It at least works on my machine :-)
By default, it seems R# treats your placeholders as identifiers, and the pattern match fails.
Double-click each placeholder on the right side, and change "identifier" to "expression".
来源:https://stackoverflow.com/questions/29678162/how-to-convert-a-c-sharp-object-initializer-to-use-a-constructor-using-resharper