Как извлечь содержимое строки в шаблоне ReSharper?
У меня есть следующая проблема:
Я хочу заменить жестко закодированную строку, которая содержит имя свойства, на выражение члена LINQ
// like this:
NotifyOfPropertyChange("MyProperty");
// becomes
NotifyOfPropertyChange(() => MyProperty);
с шаблоном ReSharper.
Следующие попытки не сработали:
NotifyOfPropertyChange("$prop$"); // ($prop$ is of type Identifier, results in parse error)
NotifyOfPropertyChange($prop$); // ($prop$ is of type Expression [System.String],
// almost works, but without removing the quotes
Шаблон замены всегда был одинаковым:
NotifyOfPropertyChange(() => $prop$);
Есть идеи?
2 ответа
Я не думаю, что вам нужен структурный поиск и замена R# здесь (что повезло, потому что я не думаю, что в текущей версии это может сделать это). Регулярные выражения Найти и Заменить в Visual Studio должны быть достаточно хорошими:
Find What:
NotifyPropertyChange\("{.*}"\)
( )
сбегают так, что они не становятся группирующей конструкцией; { }
помечать все, что соответствует шаблону внутри, чтобы сделать их доступными для выражения замены
Replace with:
NotifyPropertyChange(() => \1)
Все здесь буквально, кроме \1
, что означает "первое теговое выражение".
Если я правильно понимаю ваше намерение, то, возможно, это поможет. Некоторое время назад я нашел этот кусок кода (не помню, кто его опубликовал изначально)
public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
return (propertyExpression.Body as MemberExpression).Member.Name;
}
Итак, следующее:
NotifyPropertyChange( () => MyProperty)
должен дать результат:
NotifyPropertyChange("MyProperty")