Estoy empezando a aprender C#, y no entiendo por qué los literales de cadena regulares (es decir, " "
) no pueden contener caracteres literales nuevos. (No estoy hablando de la secuencia de escape \n
). Sé que debe usar literales literales literales (es decir, @" "
) para cadenas de varias líneas, pero ¿por qué?¿Por qué las cadenas no literales no pueden contener líneas nuevas?
no he visto que establece explícitamente que no se puede utilizar en cadenas regulares. Más que eso, excepto cuando se menciona de paso que puedo usar cadenas literales para esto, todo lo que he leído parece sugerir que los caracteres literales nuevos se permitirían en los literales regulares de las cadenas.
Beginning Visual C# 2010 y Code: Generating Multiline String Literals (Visual C#) muestran ejemplos de cadenas verbales multilínea sin más explicaciones.
Learning C# 3.0 dice esto:
En el lenguaje C#, espacios, tabulaciones y saltos de línea se considera que son espacios en blanco .... espacios en blanco extra es generalmente ignorado en las declaraciones de C#. ... La excepción a esta regla es que el espacio en blanco dentro de una cadena se trata como literal; no es ignorado
¿Es literal? Eso es lo que esperaría también, pero no es así.
Incluso incluye esta caja de punta:
Consejo
programadores de Visual Basic, tomen nota: en C#, la línea de fin de no tiene ningún significado especial. Las declaraciones terminan con punto y coma, no con caracteres de nueva línea. No hay carácter de continuación de línea porque no se necesita ninguno.
(que se dan cuenta de que esto está hablando de fuera de cadenas, pero ¿por qué habría de final de línea tienen un significado especial análisis dentro de una cadena si no lo hace fuera de una cadena?)
Tener finalmente encontré mi camino al string (C# Reference) en sí mismo, aún no obtuve ninguna idea:
Los literales de cadena pueden contener cualquier carácter literal. Secuencias de escape están incluidas. El siguiente ejemplo usa la secuencia de escape
\\
para la barra diagonal inversa,\u0066
para la letra fy\n
para la línea nueva.
Se dice que las secuencias de escape pueden ser utilizados, pero no dice que deben ser utilizados. ¿Los caracteres literales nuevos no están incluidos en "cualquier carácter literal"? Si tengo una cadena que contiene un carácter de tabulación literal en lugar de su secuencia de escape \t
, no hay ningún error. Pero si tengo una línea nueva literal, obtengo un error. Incluso cambié las terminaciones de línea del archivo de \r\n
a \n
o \r
sin efecto.
Obviamente, soy capaz de inferir a partir de ejemplos y de los errores de Visual Studio que se requiere una cadena pie de la letra si contiene un carácter de nueva línea literal, sino todo lo que he leído sugiere que no debería ser el caso . ¿Por qué la diferencia?
Creo que es probablemente una de esas cosas "porque así es como funciona el lenguaje". Probablemente fue inspirado en otros lenguajes de los que vendrían los nuevos programadores de C#. Como mencionaste, puedes usar el prefijo @ para definir una constante de cadena literal. –
@MikeChristensen Oh sí, y traté de escapar de la nueva línea literal con una barra invertida como la que he visto en C/C++. No hubo suerte allí, tampoco. – Wiseguy