En .NET puedo proporcionar ambos \r
o \n
literales de cadena, pero hay una manera de insertar algo como un carácter especial de "nueva línea" como Environment.NewLine
propiedad estática.
En .NET puedo proporcionar ambos \r
o \n
literales de cadena, pero hay una manera de insertar algo como un carácter especial de "nueva línea" como Environment.NewLine
propiedad estática.
Respuestas:
Bueno, las opciones simples son:
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
Concatenación de cadenas:
string x = "first line" + Environment.NewLine + "second line";
Interpolación de cadenas (en C # 6 y superior):
string x = $"first line{Environment.NewLine}second line";
También puede usar \ n en todas partes y reemplazar:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Tenga en cuenta que no puede convertir esto en una cadena constante , porque el valor de Environment.NewLine
solo estará disponible en el momento de la ejecución.
Environment.NewLine
? Por el contrario, es una buena práctica usarlo
Si desea una cadena constante que contenga Environment.NewLine, puede hacer algo como esto:
const string stringWithNewLine =
@"first line
second line
third line";
Como esto está en una cadena constante, se realiza en tiempo de compilación, por lo tanto, es la interpretación del compilador de una nueva línea. Parece que no puedo encontrar una referencia que explique este comportamiento, pero puedo demostrar que funciona según lo previsto. Compilé este código en Windows y Ubuntu (con Mono), luego lo desarme y estos son los resultados:
Como puede ver, en Windows las nuevas líneas se interpretan como \ r \ n y en Ubuntu como \ n
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + second
cuál es más eficiente y (IMO) más fácil de leer?
String.Format
produciría 1 cadena a la vez (pero internamente es un poco lento debido a las concatenaciones específicas de la cultura, etc.), mientras que la concatenación de cadenas - 1 resulta + 1 temporal, ¿verdad?
String.Concatenate
, que construye directamente una sola cadena de salida (IIRC, si las cadenas son literales, la concatenación se realiza en el compilador.
"a"+b+"c"+d
, etc.) por rendimiento es igual a una sola. O simplemente convertido a String.Concatenate(a,b,c,d,etc)
, ¿verdad?
string.Format
en el comentario. La concatenación de cadenas no producirá ninguna cadena temporal, porque el compilador llamará string.Concat(first, Environment.NewLine, second)
.
Una forma más de ubicación conveniente de Environment.NewLine en formato de cadena. 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 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
Si desea que ReSharper resalte sus parámetros, agregue un atributo al método anterior
[StringFormatMethod ("formato")]
Obviamente, esta implementación es menos eficiente que solo String.
Tal vez uno, que esté interesado en esta pregunta, también esté interesado en la siguiente: formato de cadena con nombre en C #
string myText =
@"<div class=""firstLine""></div>
<div class=""secondLine""></div>
<div class=""thirdLine""></div>";
eso no es:
string myText =
@"<div class=\"firstLine\"></div>
<div class=\"secondLine\"></div>
<div class=\"thirdLine\"></div>";
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Environment.NewLine
- ver las otras respuestas.
const string
las versiones más recientes de .net le permiten usar $ delante del literal que le permite usar variables dentro de la siguiente manera:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Si realmente quieres la cadena New Line como una constante, entonces puedes hacer esto:
public readonly string myVar = Environment.NewLine;
El usuario de la palabra clave de solo lectura en C # significa que esta variable solo se puede asignar una vez. Puede encontrar la documentación aquí . Permite la declaración de una variable constante cuyo valor no se conoce hasta el momento de la ejecución.
Si está trabajando con una aplicación web, puede probar esto.
StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
Si entiendo la pregunta: Pareja "\r\n"
para obtener esa nueva línea a continuación en a textbox
. Mi ejemplo funcionó:
string s1 = comboBox1.Text; // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;
string both = s1 + "\r\n" + s2;
textBox1.Text = both;
Una respuesta típica podría estar s1
s2
en el text box
uso del estilo de tipo definido.