¿Cómo interpolo cadenas?

Quiero hacer lo siguiente en C # (procedente de un fondo de Python):

strVar = "stack" mystr = "This is %soverflow" % (strVar) 

¿Cómo reemplazo el token dentro de la cadena con el valor fuera de ella?

 string mystr = string.Format("This is {0}overflow", strVar); 

Y también podría usar parámetros con nombre en lugar de índices.

Esto se ha agregado a partir de C # 6.0 (Visual Studio 2015+).

Ejemplo:

 var planetName = "Bob"; var myName = "Ford"; var formattedStr = $"Hello planet {planetName}, my name is {myName}!"; // formattedStr should be "Hello planet Bob, my name is Ford!" 

Este es el azúcar sintáctico para:

 var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName); 

Recursos adicionales:

Interpolación de cadenas para C # (v2) Discusión

C # 6.0 Vista previa del lenguaje

Puede usar string.Format para soltar valores en cadenas:

 private static readonly string formatString = "This is {0}overflow"; ... var strVar = "stack"; var myStr = string.Format(formatString, "stack"); 

Una alternativa es usar el operador de concatenación C #:

 var strVar = "stack"; var myStr = "This is " + strVar + "overflow"; 

Si está haciendo muchas concatenaciones, use la clase StringBuilder que es más eficiente:

 var strVar = "stack"; var stringBuilder = new StringBuilder("This is "); for (;;) { stringBuilder.Append(strVar); // spot the deliberate mistake ;-) } stringBuilder.Append("overflow"); var myStr = stringBuilder.ToString(); 

Si actualmente usa Visual Studio 2015 con C # 6.0, intente lo siguiente:

 var strVar = "stack"; string str = $"This is {strVar} OverFlow"; 

esa característica se llama interpolación de cadenas.

No hay operador para eso. Necesita usar string.Format .

 string strVar = "stack"; string mystr = string.Format("This is {0}soverflow", strVar); 

Desafortunadamente string.Format es un método estático, por lo que no puede simplemente escribir "This is {0}soverflow".Format(strVar) . Algunas personas han definido un método de extensión que permite esta syntax.

Use string.Format :

 string mystr = string.Format("This is {0}overflow", "stack"); 

Debería estar usando String.Format() . La syntax es un poco diferente, en su lugar se usan marcadores de posición numéricos.

Ejemplo:

 String.Format("item {0}, item {1}", "one", "two") 

Eche un vistazo a http://msdn.microsoft.com/en-us/library/system.string.format.aspx para obtener más detalles.

Tienes 2 opciones. Puede usar String.Format o puede usar el operador de concatenación.

 String newString = String.Format("I inserted this string {0} into this one", oldstring); 

O

 String newString = "I inserted this string " + oldstring + " into this one"; 

Utilizar:

 strVar = "stack" mystr = String.Format("This is {0}", strVar); 

Hay una forma más de implementar marcadores de posición con cadena. Reemplazar, extrañamente ayuda en ciertas situaciones:

 mystr = mystr.Replace("%soverflow", strVar); 

Puede lograr esto con Expansive: https://github.com/anderly/Expansive