Reemplazar múltiples palabras en cadena

Tengo varias palabras que quiero reemplazar con valores, ¿cuál es la mejor manera de hacer esto?

Ejemplo: esto es lo que he hecho pero se siente y se ve tan mal

string s ="Dear , your booking is confirmed for the "; string s1 = s.Replace("", client.FullName); string s2 =s1.Replace("", event.EventDate.ToString()); txtMessage.Text = s2; 

¿Tiene que haber una mejor manera?

Gracias

Si planea tener un número dynamic de reemplazos, que podría cambiar en cualquier momento, y desea hacerlo un poco más limpio, siempre podría hacer algo como esto:

 // Define name/value pairs to be replaced. var replacements = new Dictionary(); replacements.Add("", client.FullName); replacements.Add("", event.EventDate.ToString()); // Replace string s = "Dear , your booking is confirmed for the "; foreach (var replacement in replacements) { s = s.Replace(replacement.Key, replacement.Value); } 

Usted podría utilizar String.Format .

 string.Format("Dear {0}, your booking is confirmed for the {1}", client.FullName, event.EventDate.ToString()); 

Para desarrollar la respuesta de George, puedes analizar el mensaje en tokens y luego construir el mensaje a partir de los tokens.

Si la cadena de la plantilla era mucho más grande y hay más tokens, esto sería un poco más eficiente ya que no está reconstruyendo el mensaje completo para cada reemplazo de token. Además, la generación de los tokens se podría mover a un Singleton por lo que solo se hace una vez.

 // Define name/value pairs to be replaced. var replacements = new Dictionary(); replacements.Add("", client.FullName); replacements.Add("", event.EventDate.ToString()); string s = "Dear , your booking is confirmed for the "; // Parse the message into an array of tokens Regex regex = new Regex("(<[^>]+>)"); string[] tokens = regex.Split(s); // Re-build the new message from the tokens var sb = new StringBuilder(); foreach (string token in tokens) sb.Append(replacements.ContainsKey(token) ? replacements[token] : token); s = sb.ToString(); 

Puede encadenar las operaciones Reemplazar juntas:

 s = s.Replace(...).Replace(...); 

Tenga en cuenta que no necesita crear otras cadenas para hacer esto.

Usar String.Format es la forma adecuada, pero solo si puede cambiar la cadena original para que se adapte al formato de corsé.

Cuando haces reemplazos múltiples, es mucho más eficiente usar StringBuilder lugar de cadenas. De lo contrario, la función de reemplazo es hacer una copia de la cadena cada vez que la ejecuta, perdiendo tiempo y memoria.

Utilice String.Format:

 const string message = "Dear {0}, Please call {1} to get your {2} from {3}"; string name = "Bob"; string callName = "Alice"; string thingy = "Book"; string thingyKeeper = "Library"; string customMessage = string.Format(message, name, callName, thingy, thingyKeeper); 

Prueba este código:

 string MyString ="This is the First Post to Stack overflow"; MyString = MyString.Replace("the", "My").Replace("to", "to the"); 

Resultado: MyString ="This is My First Post to the Stack overflow";

Mejorando en lo que dijo @Evan …

 string s ="Dear , your booking is confirmed for the "; string s1 = client.FullName; string s2 = event.EventDate.ToString(); txtMessage.Text = s.Replace("", s1).Replace("EventDate", s2);