¿Por qué las personas siguen confundiendo cadenas con literales de cadena? La respuesta aceptada es una gran respuesta a una pregunta diferente; no a este
Sé que este es un tema antiguo, pero vine aquí posiblemente con la misma pregunta que el OP, y es frustrante ver cómo la gente sigue interpretándolo mal. O tal vez lo estoy leyendo mal, no lo sé.
En términos generales, una cadena es una región de la memoria de la computadora que, durante la ejecución de un programa, contiene una secuencia de bytes que pueden asignarse a caracteres de texto. Un literal de cadena, por otro lado, es una pieza de código fuente, aún no compilada, que representa el valor utilizado para inicializar una cadena más adelante, durante la ejecución del programa en el que aparece.
En C #, la declaración ...
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
... no produce una cadena de tres líneas sino un trazador de líneas; la concatenación de tres cadenas (cada una inicializada de un literal diferente) ninguna de las cuales contiene un modificador de nueva línea.
Lo que el OP parece estar preguntando, al menos lo que estaría preguntando con esas palabras, no es cómo introducir, en la cadena compilada, saltos de línea que imitan a los que se encuentran en el código fuente, sino cómo separarlos para mayor claridad. , una sola línea de texto en el código fuente sin introducir saltos en la cadena compilada. Y sin requerir un tiempo de ejecución prolongado, pasó uniéndose a las múltiples subcadenas que provienen del código fuente. Al igual que las barras invertidas finales dentro de un literal de cadena multilínea en javascript o C ++.
Sugerir el uso de cadenas literales, no importa StringBuilder
s , so String.Join
incluso funciones anidadas con reversiones de cadenas y qué no, me hace pensar que la gente realmente no comprende la pregunta. O tal vez no lo entiendo.
Hasta donde yo sé, C # no tiene (al menos en la versión paleolítica que todavía estoy usando, de la década anterior) una característica para producir limpiamente literales de cadena multilínea que se puedan resolver durante la compilación en lugar de la ejecución.
Tal vez las versiones actuales sí lo admiten, pero pensé que compartiría la diferencia que percibo entre cadenas y literales de cadena.
ACTUALIZAR:
(Del comentario de MeowCat2012) Puedes. El enfoque "+" de OP es el mejor. Según las especificaciones, la optimización está garantizada: http://stackoverflow.com/a/288802/9399618