2010-02-24 6 views
0

Je suis en train de faire un tas de Regex remplace comme celui-ciRegex Remplacer sans chaîne Redéclaration

_skeleton = Regex.Replace(_skeleton, "&%currTIME", DateTime.Now.ToString()); 

Est-il possible de le faire donc je ne pas écrire « _skeleton = »?

Peut-être que vous utilisez 'out'?

Répondre

2

Les chaînes étant immuables, vous ne pouvez pas modifier leur contenu. Vous devez créer une nouvelle chaîne avec le contenu que vous voulez.

penser comme tout autre type immuable (DateTime, int, etc.)

int i = 1; 
i++; // i = i + 1 
i += 2; // i = i + 2 

DateTime d = DateTime.Now 
d = d.AddDays(1); 

string s = "s"; 
s = s + "tring"; 

Vous pouvez envelopper la fonctionnalité d'être un peu plus fonctionnel dans la nature:

public void MyRegexReplace(ref string mystring, string pattern, string replaceWith) 
{ 
    mystring = Regex.Replace(mystring, pattern, replaceWith); 
} 

Et puis appelez-le comme:

MyRegexReplace(ref _skeleton, "&%currTIME", DateTime.Now.ToString()); 

Mais cela ne me semble pas utile.

+0

Il suffit d'utiliser 'mystring' comme paramètre ref:/ –

+0

Yup. Juste édité pour le faire. J'ai oublié ça pendant une seconde. – Joel

0

Si vous ne voulez pas avoir à garder vous répéter pour plusieurs remplacements sur la même chaîne, vous pouvez imbriquer les appels à Regex.Replace():

_skeleton = Regex.Replace(
        Regex.Replace(_skeleton, "foo", "bar"), 
      "&%currTIME", DateTime.Now.ToString()); 

(Modification de la réponse parce que ma réponse est trop long pour un commentaire)

Vous n'avez pas besoin de les mettre en retrait même:

_skeleton = Regex.Replace(Regex.Replace(Regex.Replace/*...*/(_skeleton, 
      "foo", "bar"), 
      "baz", "blaz"), 
      //.. 
      "TIMTOWTDI", "There Is More Than One Way To Do It" 
      )); 
+0

Malheureusement, j'ai comme 20 remplace. C'est illisible sans écrire une nouvelle ligne. – cam

+0

@cam: J'ai mis une réponse à votre commentaire dans ma réponse originale, car la boîte de commentaire est trop gênante pour cela. –

0

Que diriez-vous définir:

void static void RexReplace(ref strTarget, string searchPatter, string replacePattern) 
{ 
     str = Regex.Replace(str, searchPatter, replacePattern); 
} 

Et puis écrire

RexReplace(ref _skeleton, "&%currTIME", DateTime.Now.ToString());