我遇到了以下问题:
我想替换包含具有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$);
有什么想法吗?
答案 0 :(得分:1)
我认为你不需要R#的结构搜索和替换(这是幸运的,因为我不认为在目前的版本中它可以做到这一点)。 Visual Studio的查找和替换正则表达式应该足够好:
Find What:
NotifyPropertyChange\("{.*}"\)
( )
被转义,以便他们成为一个分组结构; { }
标记与模式匹配的任何内容,使其可用于替换表达式
Replace with:
NotifyPropertyChange(() => \1)
此处的所有内容都是文字,但\1
除外,这意味着'第一个标记的表达式'。
答案 1 :(得分:0)
如果我理解你的意图,那么这可能会有所帮助。 前段时间我发现了这段代码(不记得是谁最初发布的)
public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
return (propertyExpression.Body as MemberExpression).Member.Name;
}
以下内容:
NotifyPropertyChange( () => MyProperty)
应该给出结果:
NotifyPropertyChange("MyProperty")