2011-03-24 5 views
2

J'ai le problème suivant:Comment extraire le contenu d'une chaîne dans un motif ReSharper?

Je veux remplacer une chaîne hardcoded qui contient un nom de propriété avec une expression de membre LINQ

// like this: 
NotifyOfPropertyChange("MyProperty"); 
// becomes 
NotifyOfPropertyChange(() => MyProperty); 

avec un motif de ReSharper.

Les tentatives suivantes ne fonctionnaient pas:

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 

Le remplacement de modèle était toujours le même:

NotifyOfPropertyChange(() => $prop$); 

Toutes les idées?

Répondre

0

Si je comprends bien votre intention, cela pourrait peut-être vous aider. Il y a quelque temps j'ai trouvé ce morceau de code (ne me souviens pas qui l'a publié à l'origine)

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

Ainsi, les éléments suivants:

NotifyPropertyChange(() => MyProperty) 

devrait donner un résultat:

NotifyPropertyChange("MyProperty") 
+0

Je crois qu'il demande à propos de l'utilisation de la recherche structurelle R # s et remplacer, plutôt que de faire quoi que ce soit au moment de l'exécution – AakashM

1

Je ne pense pas que vous ayez besoin de la recherche structurelle et du remplacement de R # ici (ce qui est une chance, car je ne pense pas que la version actuelle puisse le faire). Visuelle FIND Studio Replace regexes devrait être assez bon:

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

Le () sont évadés pour qu'ils deviennent dontg une construction de regroupement; l'étiquette { } tout correspond au motif à l'intérieur de les mettre à la disposition de la remplacer l'expression

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

Tout ici est littérale, sauf \1, ce qui signifie « la première expression tagged ».

Questions connexes