In .NET posso fornire sia \ro \nstringhe letterali, ma c'è un modo per inserire qualcosa come "nuova linea" carattere speciale come Environment.NewLineproprietà statica?
In .NET posso fornire sia \ro \nstringhe letterali, ma c'è un modo per inserire qualcosa come "nuova linea" carattere speciale come Environment.NewLineproprietà statica?
Risposte:
Bene, le opzioni semplici sono:
string.Format:
string x = string.Format("first line{0}second line", Environment.NewLine);Concatenazione di stringhe:
string x = "first line" + Environment.NewLine + "second line";Interpolazione di stringhe (in C # 6 e successive):
string x = $"first line{Environment.NewLine}second line";Puoi anche usare \ n ovunque e sostituire:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Nota che non puoi renderlo una costante di stringa , perché il valore di Environment.NewLinesarà disponibile solo al momento dell'esecuzione.
Environment.NewLine? Al contrario, è una buona pratica usarlo
Se vuoi una stringa const che contenga Environment.NewLine, puoi fare qualcosa del genere:
const string stringWithNewLine =
@"first line
second line
third line";
Poiché questo è in una stringa const, viene eseguito in fase di compilazione, pertanto è l'interpretazione del compilatore di una nuova riga. Non riesco a trovare un riferimento che spieghi questo comportamento, ma posso provare che funziona come previsto. Ho compilato questo codice sia su Windows che su Ubuntu (con Mono) quindi disassemblato e questi sono i risultati:

Come puoi vedere, in Windows le nuove righe vengono interpretate come \ r \ n e su Ubuntu come \ 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 + secondquale è più efficiente e (IMO) più facile da leggere?
String.Formatprodurrà 1 stringa alla volta (ma internamente è un po 'lenta a causa di concatenazioni specifiche della cultura, ecc.), Mentre la concatenazione di stringhe - 1 risultante + 1 temporanea, giusto?
String.Concatenate, che crea direttamente solo una stringa di output (IIRC, se le stringhe sono letterali, la concatenazione viene eseguita nel compilatore.
"a"+b+"c"+d, ecc.) Per prestazioni sono uguali a una sola? O semplicemente convertito in String.Concatenate(a,b,c,d,etc), giusto?
string.Formatnel commento. La concatenazione di stringhe non produrrà stringhe temporanee, poiché il compilatore chiamerà string.Concat(first, Environment.NewLine, second).
Un altro modo per posizionare comodamente Environment.NewLine in formato stringa. L'idea è quella di creare un metodo di estensione della stringa che formatta la stringa come al solito ma sostituisce anche {nl} nel testo 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
Codice
///<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
Se vuoi che ReSharper evidenzi i tuoi parametri, aggiungi l'attributo al metodo sopra
[StringFormatMethod ( "formato")]
Questa implementazione è ovviamente meno efficiente di String.Format
Forse uno, che fosse interessato a questa domanda, sarebbe interessato anche alla domanda successiva: formattazione della stringa denominata in C #
string myText =
@"<div class=""firstLine""></div>
<div class=""secondLine""></div>
<div class=""thirdLine""></div>";
Non è quello:
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: vedere le altre risposte.
const string
le nuove versioni .net consentono di utilizzare $ davanti al valore letterale, che consente di utilizzare le variabili all'interno come segue:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Se vuoi davvero la stringa New Line come costante, puoi farlo:
public readonly string myVar = Environment.NewLine;
L'utente della parola chiave readonly in C # significa che questa variabile può essere assegnata una sola volta. Puoi trovare la documentazione qui . Consente la dichiarazione di una variabile costante il cui valore non è noto fino al momento dell'esecuzione.
Se stai lavorando con un'applicazione Web puoi provare questo.
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 />")
Se capisco la domanda: Coppia "\r\n"per ottenere quella nuova riga sotto in a textbox. Il mio esempio ha funzionato -
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 risposta tipica potrebbe essere s1
s2 nello text boxstile di tipo definito usando.