Alternative à plusieurs Ssortingng.Replaces

Mon code utilise Ssortingng.Replace plusieurs fois de suite:

 myssortingng = myssortingng.Replace("somessortingng", variable1); myssortingng = myssortingng.Replace("somessortingng2", variable2); myssortingng = myssortingng.Replace("somessortingng3", variable1); 

Je pense qu’il existe un moyen plus rapide et plus efficace de le faire. Que suggérerais-tu?

Pour une alternative simple, utilisez simplement un SsortingngBuilder ….

 SsortingngBuilder sb = new SsortingngBuilder("11223344"); ssortingng mySsortingng = sb .Replace("1", ssortingng.Empty) .Replace("2", ssortingng.Empty) .Replace("3", ssortingng.Empty) .ToSsortingng(); 

Allons-nous chercher des moyens de rendre cela plus difficile à comprendre?

Si c’est regex est ton ami

 var replacements = new Dictionary() { {"somessortingng",someVariable1}, {"anotherssortingng",someVariable2} }; var regex = new Regex(Ssortingng.Join("|",replacements.Keys.Select(k => Regex.Escape(k)))); var replaced = regex.Replace(input,m => replacements[m.Value]); 

En direct: http://rextester.com/SXXB8348

Vous pourriez au moins enchaîner les déclarations:

 myssortingng = myssortingng.Replace("somessortingng", variable1) .Replace("somessortingng2", variable2) .Replace("somessortingng3", variable3); 

Appeler Replace trois fois n’est pas seulement une réponse valide, il peut être préféré:

RegEx prend trois étapes: parsingr, exécuter, formuler . Mais Ssortingng.Replace est codé en dur, donc dans de nombreux cas, sa vitesse est supérieure. Et un RegEx complexe n’est pas aussi lisible qu’une chaîne bien remplie d’instructions Replace . (Comparer la solution de Jonathan à celle de Daniel )

Si vous n’êtes toujours pas convaincu que Replace est préférable pour votre cas, faites-en une concurrence! Essayez les deux méthodes côte à côte et utilisez un Stopwatch pour savoir combien de millisecondes vous économisez en utilisant vos données.

Mais n’optimisez pas votre code sauf si vous en avez besoin! Tout développeur préfèrera la lisibilité et la maintenabilité à une stack de spaghettis cryptiques qui s’effectuera 3 millisecondes plus rapidement.

Cet article Regex: remplacer plusieurs chaînes en un seul passage avec C # peut être utile:

 static ssortingng MultipleReplace(ssortingng text, Dictionary replacements) { return Regex.Replace(text, "(" + Ssortingng.Join("|", adict.Keys.ToArray()) + ")", delegate(Match m) { return replacements[m.Value]; } ); } // somewhere else in code ssortingng temp = "Jonathan Smith is a developer"; adict.Add("Jonathan", "David"); adict.Add("Smith", "Seruyange"); ssortingng rep = MultipleReplace(temp, adict); 

Selon la manière dont vos données sont organisées (ce que vous remplacez) ou combien vous en avez; un tableau et des boucles pourraient être une bonne approche.

 ssortingng[] replaceThese = {"1", "2", "3"}; ssortingng data = "replace1allthe2numbers3"; foreach (ssortingng curr in replaceThese) { data = data.Replace(curr, ssortingng.Empty); } 

Si vous ne souhaitez pas utiliser RegEx, ajoutez cette classe à votre projet,
Il utilise une méthode d’extension ‘MultipleReplace’:

 public static class SsortingngExtender { public static ssortingng MultipleReplace(this ssortingng text, Dictionary replacements) { ssortingng retVal = text; foreach (ssortingng textToReplace in replacements.Keys) { retVal = retVal.Replace(textToReplace, replacements[textToReplace]); } return retVal; } } 

Ensuite, vous pouvez utiliser ce morceau de code:

  ssortingng myssortingng = "foobar"; Dictionary ssortingngsToReplace = new Dictionary(); ssortingngsToReplace.Add("somessortingng", variable1); ssortingngsToReplace.Add("somessortingng2", variable2); ssortingngsToReplace.Add("somessortingng3", variable1); myssortingng = myssortingng.MultipleReplace(ssortingngsToReplace); 

Ma méthode préférée consiste à utiliser la puissance de Regex pour résoudre un problème de remplacement multiple. Le seul problème avec cette approche est que vous ne pouvez choisir qu’une ssortingng à remplacer.

Ce qui suit remplacera tout '/' ou ':' par un '-' pour créer un nom de fichier valide.

 Regex.Replace("invalid:file/name.txt", @"[/:]", "-");