Quiero hacer lo siguiente en C# (procedentes de un fondo de Python):¿Cómo interpolo cadenas?
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
¿Cómo se sustituye el símbolo dentro de la cadena con el valor fuera de él?
Quiero hacer lo siguiente en C# (procedentes de un fondo de Python):¿Cómo interpolo cadenas?
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
¿Cómo se sustituye el símbolo dentro de la cadena con el valor fuera de él?
string mystr = string.Format("This is {0}overflow", strVar);
Y también puede usar named parameters en lugar de índices.
No hay operador para eso. Debe 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 se puede simplemente escribir "This is {0}soverflow".Format(strVar)
. Algunas personas han definido un método de extensión que permite esta sintaxis.
Uso string.Format
:
string mystr = string.Format("This is {0}overflow", "stack");
Uso:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
Debería utilizar String.Format()
. La sintaxis es un poco diferente, en su lugar se usan marcadores de posición numéricos.
Ejemplo:
String.Format("item {0}, item {1}", "one", "two")
Tenga una mirada en http://msdn.microsoft.com/en-us/library/system.string.format.aspx para más detalles.
Tiene 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";
Puede utilizar string.Format
a caer valores en cadenas:
private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");
Una alternativa es utilizar el operador de C# concatenación:
var strVar = "stack";
var myStr = "This is " + strVar + "overflow";
Si estás haciendo un montón de concatenaciones utilizan 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();
Usted puede lograr esto con amplias: https://github.com/anderly/Expansive
Esto ha sido añadido como 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áctica para:
var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);
Recursos adicionales:
Parche para mono (con fecha de 2009, su millaje puede variar) http://tirania.org/blog/archive/2009/Dec-20.html –
Para los usuarios mono: http://stackoverflow.com/questions/29208869/c-sharp-6-0-string-interpolation-in-mono-mcs –
Esta característica es algo tan hermoso. Especialmente con VS2015 y el soporte de editor para que pueda ver claramente las cadenas interpoladas y obtener intellisense. ¡Incluso funciona con métodos! '$ (" Esta función es {GetDescription (FEATURE_AMAZING))} ");' – Patrick
Si actualmente utiliza Visual Studio 2015 con C# 6.0, pruebe lo siguiente:
var strVar = "stack";
string str = $"This is {strVar} OverFlow";
que función se denomina interpolación de cadenas.
¿No es solo 'string str = $" Esto es {strVar} OverFlow ";'? –
Este no es un código de compilación ya que da 'CS1009 \t Secuencia de escape no reconocida' – guneysus
esto está comenzando C# 6.0 nly @guneysus –
Hay una forma más de poner en práctica los marcadores de posición con String.Replace, por extraño que ayuda en ciertas situaciones:
mystr = mystr.Replace("%soverflow", strVar);
Debajo de las sábanas 'String.Format()' utiliza StringBuilder. StringBuilder suele ser más eficiente al concatenar muchas cadenas, pero el operador de concatenación es perfecto para una sola vez. 'String.Format()' es útil cuando se debe aplicar formato a la salida, p. para agregar relleno o ceros a valores numéricos. Entonces, usar 'String.Format()' en un bucle creará una gran cantidad de StringBuilders. En esa situación, es mejor usar un solo StringBuilder declarado fuera del bucle y 'AppendFormat()' dentro del bucle. –