我遇到以下问题:
我想用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$);
有任何想法吗?
最佳答案
我认为您不需要在这里进行R#的结构搜索和替换(这很幸运,因为我认为在当前版本中它不能做到这一点)。 Visual Studio的“查找和替换”正则表达式应该足够好:
Find What:
NotifyPropertyChange\("{.*}"\)
( )
被转义,因此它们不会成为分组构造; { }
标记与模式中的任何匹配项均可用于替换表达式Replace with:
NotifyPropertyChange(() => \1)
除了
\1
以外,这里的所有内容均为文字,表示“第一个标记的表达式”。