76 votos

¿Cómo se inserta la nueva línea en el literal de la cadena?

En .NET puedo proporcionar ambos \r o \n literales de cadena, pero hay una forma de insertar algo así como "nueva línea" de personaje especial como Environment.NewLine propiedad estática?

161voto

Jon Skeet Puntos 692016

Bueno, las opciones simples son:

  • string.Format :

    string x = string.Format("first line{0}second line", Environment.NewLine);
  • Concatenación de cuerdas:

    string x = "first line" + Environment.NewLine + "second line";

También podrías usar \n en todas partes, y reemplazar:

string x = "first line\nsecond line\nthird line".Replace("\n",
                                                         Environment.NewLine);

Ten en cuenta que no puedes hacer de esto una cadena constante porque el valor de Environment.NewLine sólo estará disponible en el momento de la ejecución.

16voto

Tal Jerome Puntos 121

Si quieres una cadena de const que contiene Environment.NewLine en ella puedes hacer algo como esto:

const string stringWithNewLine =
@"first line
second line
third line";

EDITAR

Dado que esto está en una cadena constante, se hace en tiempo de compilación, por lo tanto, es la interpretación del compilador de una nueva línea. No puedo encontrar una referencia que explique este comportamiento, pero puedo probar que funciona como se pretende. Compilé este código tanto en Windows como en Ubuntu (con Mono) y luego lo desmonté y estos son los resultados:

Disassemble on Windows Disassemble on Ubuntu

Como puedes ver, en Windows las nuevas líneas se interpretan como \r\n y en Ubuntu como \n

10voto

abatishchev Puntos 42425
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();

3voto

MajesticRa Puntos 2244

Una forma más de colocar convenientemente Environment.NewLine en la cadena de formato. La idea es crear un método de extensión de cadena que formatee la cadena como de costumbre pero que también reemplace {nl} en el texto con Environment.NewLine

Uso

   " X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
   gives:
    X=1
    Y=2
    X+Y=3

Código

    ///<summary>
    /// Use "string".FormatIt(...) instead of string.Format("string, ...)
    /// Use {nl} in text to insert Environment.NewLine 
    ///</summary>
    ///<exception cref="ArgumentNullException">If format is null</exception>
    [StringFormatMethod("format")]
    public static string FormatIt(this string format, params object[] args)
    {
        if (format == null) throw new ArgumentNullException("format");

        return string.Format(format.Replace("{nl}", Environment.NewLine), args);
    }

Nota

  1. Si quieres que ReSharper resalte tus parámetros, añade el atributo al método anterior

    [StringFormatMethod("formato")]

  2. Esta implementación es obviamente menos eficiente que String.Format

  3. Quizá a quien le interese esta pregunta también le interese la siguiente: Formato de cadenas con nombre en C#

2voto

Hakkı Eser Puntos 1
string myText =
    @"<div class=""firstLine""></div>
      <div class=""secondLine""></div>
      <div class=""thirdLine""></div>";

no es eso:

string myText =
@"<div class=\"firstLine\"></div>
  <div class=\"secondLine\"></div>
  <div class=\"thirdLine\"></div>";

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X