我开始学习 C#,但我不明白为什么常规字符串文字(即" "
)不能包含文字换行符。(我不是在谈论转义序列\n
)。我知道您必须@" "
对多行字符串使用逐字字符串文字(即,),但为什么呢?
我没有看到它明确指出您不能在常规字符串中使用它们。不仅如此,除了顺便提到我可以为此使用逐字字符串之外,我读过的所有内容似乎都表明在常规字符串文字中允许使用文字换行符。
开始 Visual C# 2010和代码:生成多行字符串文字 (Visual C#)显示逐字多行字符串的示例,无需进一步解释。
学习 C# 3.0是这样说的:
在 C# 语言中,空格、制表符和换行符被认为是空格......在 C# 语句中通常会忽略额外的空格。...该规则的例外是字符串中的空格被视为文字;它没有被忽视。
所以是字面意思?这也是我所期望的,但事实并非如此。
它甚至包括这个提示框:
提示
Visual Basic 程序员注意:在 C# 中,行尾没有特殊意义。语句以分号结尾,而不是换行符。没有行继续字符,因为不需要。
(我意识到这是在谈论字符串之外,但是如果它不在字符串之外,为什么行尾在字符串内部具有特殊的解析意义?)
终于找到了字符串(C# 参考)本身的方法,我仍然没有获得任何见解:
字符串文字可以包含任何字符文字。包括转义序列。以下示例
\\
对反斜杠、\u0066
字母 f 和\n
换行符使用转义序列。
它说可以使用转义序列,但没有说必须使用它们。“任何字符文字”中是否不包含文字换行符?如果我有一个包含文字制表符而不是其转义序列的字符串,\t
则没有错误。但是如果我有一个文字换行符,我会得到一个错误。我什至将文件的行尾从\r\n
to更改\n
为\r
无效。
显然,我可以从示例和 Visual Studio 错误中推断出,如果它包含文字换行符,则需要逐字字符串,但我读过的所有内容都表明不应该是这种情况。为什么有区别?