2

我有以下问题:

我想用 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$);

有任何想法吗?

4

2 回答 2

1

我认为您在这里不需要 R# 的结构搜索和替换(这是幸运的,因为我认为在当前版本中它不能做到这一点)。Visual Studio 的查找和替换正则表达式应该足够好:

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

( )转义以使它们不会成为分组构造;标记与其中的{ }模式匹配以使它们可用于替换表达式

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

这里的所有内容都是文字,除了\1,它的意思是“第一个标记的表达式”。

于 2011-03-24T12:47:01.107 回答
0

如果我正确理解您的意图,那么这可能会有所帮助。前段时间我发现了这段代码(不记得最初是谁发布的)

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

所以以下内容:

NotifyPropertyChange( () => MyProperty)

应该给出一个结果:

NotifyPropertyChange("MyProperty")
于 2011-03-24T12:06:04.317 回答