c# - ejemplos - ¿Cómo insertar nueva línea en cadena literal?
awk unix (11)
En .NET, puedo proporcionar literales de cadena /r
o /n
, pero hay una manera de insertar algo así como el carácter especial "nueva línea", como la propiedad estática Environment.NewLine
.
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 podría 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 hacer que esto sea una cadena constante , ya que el valor de Environment.NewLine
solo estará disponible en el momento de la ejecución.
Las versiones más nuevas de .net le permiten usar $ al frente del literal que le permite usar variables dentro de la siguiente manera:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Me gusta más el "camino pitónico"
List<string> lines = new List<string> {
"line1",
"line2",
String.Format("{0} - {1} | {2}",
someVar,
othervar,
thirdVar
)
};
if(foo)
lines.Add("line3");
return String.Join(Environment.NewLine, lines);
Si desea una cadena const que contenga Environment.NewLine, puede hacer algo como esto:
const string stringWithNewLine =
@"first line
second line
third line";
EDITAR
Como se trata de una cadena const, 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 probar que funciona según lo previsto. Recopilé este código en Windows y Ubuntu (con Mono) y luego lo desensamblé y estos son los resultados:
Como puede ver, en Windows las líneas nuevas se interpretan como / r / n y en Ubuntu como / n
Si entiendo la pregunta: Pareja "/ r / n" para obtener esa nueva línea a continuación en un cuadro de texto. Mi ejemplo funcionó -
cadena s1 = comboBox1.Text; // s1 es la variable asignada al cuadro 1, etc. string s2 = comboBox2.Text;
string both = s1 + "/ r / n" + s2; textBox1.Text = both; Una respuesta típica podría ser s1 s2 en el cuadro de texto utilizando un estilo de tipo definido.
Si está trabajando con una aplicación web puede intentarlo.
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 realmente quieres la cadena de Nueva línea como una constante, puedes hacer esto:
public readonly string myVar = Environment.NewLine;
El usuario de la palabra clave readonly en C # significa que esta variable solo se puede asignar a una vez. Puede encontrar la documentación here . Permite la declaración de una variable constante cuyo valor no se conoce hasta el momento de la ejecución.
Una forma más de ubicación conveniente de Environment.NewLine en cadena de formato. La idea es crear un método de extensión de cadena que formatee cadena como siempre, pero también reemplaza {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 destaque sus parámetros, agregue un atributo al método anterior
[StringFormatMethod ("formato")]
Esta implementación es obviamente menos eficiente que solo String.Format
Tal vez uno, que esté interesado en esta pregunta, también estaría interesado en la siguiente pregunta: formateo de cadenas con nombre en C #
static class MyClass
{
public const string NewLine="/n";
}
string x = "first line" + MyClass.NewLine + "second line"
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>";
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();