Perché le persone continuano a confondere le stringhe con i letterali delle stringhe? La risposta accettata è un'ottima risposta a una domanda diversa; non a questo.
So che questo è un vecchio argomento, ma sono venuto qui con forse la stessa domanda del PO, ed è frustrante vedere come le persone continuano a fraintenderlo. O forse sto leggendo male, non lo so.
In parole povere, una stringa è una regione di memoria del computer che, durante l'esecuzione di un programma, contiene una sequenza di byte che possono essere associati a caratteri di testo. Una stringa letterale, d'altra parte, è un pezzo di codice sorgente, non ancora compilato, che rappresenta il valore utilizzato per inizializzare una stringa in seguito, durante l'esecuzione del programma in cui appare.
In C #, la dichiarazione ...
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
... non produce una stringa di tre righe ma una riga; la concatenazione di tre stringhe (ciascuna inizializzata da un letterale diverso) nessuna delle quali contiene un modificatore di nuova riga.
Ciò che l'OP sembra chiedere - almeno quello che vorrei chiedere con quelle parole - non è come introdurre, nella stringa compilata, le interruzioni di riga che imitano quelle trovate nel codice sorgente, ma come spezzare per chiarezza a lungo , singola riga di testo nel codice sorgente senza introdurre interruzioni nella stringa compilata. E senza richiedere un tempo di esecuzione prolungato, impiegato per unire le molteplici sottostringhe provenienti dal codice sorgente. Come le barre rovesciate finali all'interno di una stringa multilinea letterale in javascript o C ++.
Suggerire l'uso di stringhe testuali, nevermind StringBuilder
s, String.Join
se addirittura funzioni annidate con inversioni di stringa e quant'altro, mi fa pensare che le persone non stiano davvero capendo la domanda. O forse non lo capisco.
Per quanto ne so, C # non (almeno nella versione paleolitica che sto ancora utilizzando, rispetto al decennio precedente) ha una funzione per produrre in modo chiaro valori letterali su più righe che possono essere risolti durante la compilazione piuttosto che nell'esecuzione.
Forse le versioni attuali lo supportano, ma ho pensato di condividere la differenza che percepisco tra stringhe e letterali di stringa.
AGGIORNARE:
(Dal commento di MeowCat2012) Puoi farlo. L'approccio "+" di OP è il migliore. Secondo le specifiche, l'ottimizzazione è garantita: http://stackoverflow.com/a/288802/9399618