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#の構造検索と置換は必要ないと思います(現在のバージョンではこれができるとは思わないので、幸いです)。VisualStudioの正規表現の検索と置換で十分です。

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 に答える