Как извлечь содержимое строки в шаблоне ReSharper? - PullRequest
2 голосов
/ 24 марта 2011

У меня следующая проблема:

Я хочу заменить жестко закодированную строку, содержащую имя свойства, на выражение члена 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 ]

1 голос
/ 24 марта 2011

Я не думаю, что вам нужен структурный поиск и замена R # здесь (что повезло, потому что я не думаю, что в текущей версии это может сделать это) Регулярные выражения Найти и Заменить в Visual Studio должны быть достаточно хороши:

Find What: 
NotifyPropertyChange\("{.*}"\)

( ) экранированы, так что они не становятся группирующей конструкцией; тег { }, который соответствует шаблону внутри, чтобы сделать их доступными для выражения замены

Replace with:
NotifyPropertyChange(() => \1)

Все здесь буквально, кроме \1, что означает «первое теговое выражение».

0 голосов
/ 24 марта 2011

Если я правильно понимаю ваше намерение, возможно, это поможет. Некоторое время назад я нашел этот кусок кода (не помню, кто его опубликовал)

public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
    {
        return (propertyExpression.Body as MemberExpression).Member.Name;
    }

Итак, следующее:

NotifyPropertyChange( () => MyProperty)

должен дать результат:

NotifyPropertyChange("MyProperty")
...