¿Cómo interpolo cadenas?


106

Quiero hacer lo siguiente en C # (proveniente 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?

Respuestas:



270

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 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 discusión de C # (v2)

Vista previa del lenguaje C # 6.0


Parche para mono (con fecha de 2009, su millaje puede variar) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave


Esta característica es algo tan hermoso. Especialmente con VS2015 y el soporte del editor para que pueda ver claramente las cadenas interpoladas y obtener intellisense. ¡Incluso funciona con métodos! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Patrick

14

Puede usar string.Formatpara colocar 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 de C #:

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

Si está haciendo muchas concatenaciones, use la StringBuilderclase 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();


12

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.


6

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

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

Desafortunadamente, string.Formates 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 sintaxis.


5

Utilizar string.Format:

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


1

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";

Bajo las sábanas String.Format()usa StringBuilder. StringBuilder suele ser más eficiente cuando se concatenan muchas cadenas, pero el operador de concatenación es perfecto para una sola. String.Format()es útil cuando es necesario aplicar formato a la salida, por ejemplo, para agregar relleno o ceros iniciales a valores numéricos. Entonces, usarlo String.Format()en un bucle potencialmente instanciará muchos StringBuilders. En esa situación, es mejor usar un solo StringBuilder declarado fuera del ciclo y AppendFormat()dentro del ciclo.
David Clarke

1

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

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

1

Puedes usar la siguiente forma

Interpolación de cadenas

El carácter especial $ identifica una cadena literal como una cadena interpolada. p.ej

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

Una cadena interpolada es un literal de cadena que puede contener expresiones interpoladas. Cuando una cadena interpolada se resuelve en una cadena de resultado, los elementos con expresiones interpoladas se reemplazan por las representaciones de cadena de los resultados de la expresión.

String.Format

Utilice String.Format si necesita insertar el valor de un objeto, variable o expresión en otra cadena.

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));

0

Utilizar:

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

0

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


C # tiene un mecanismo de interpolación integrado. No hay absolutamente ninguna razón para incluir una biblioteca para esta funcionalidad.
Nombre para mostrar

2
@Displayname mira la fecha de la pregunta. C # no siempre tuvo interpolación de cadenas incorporada. Se agregó en C # 6 en 2016. Por lo tanto, la razón de mi respuesta en 2014.
anderly
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.