我開始學習C#,我不明白爲什麼規則字符串(即" "
)不能包含文字換行字符。 (我不是在談論轉義序列\n
)。我知道你必須爲多行字符串使用逐字字符串文字(即@" "
),但爲什麼?爲什麼非字母字符串不能包含換行符?
我從來沒見過它明確指出,你不能按照固定字符串中使用它們。除此之外,除了傳遞中提到我可以使用逐字字符串的情況外,我所讀過的所有內容似乎都表明,常規字符串文字中允許使用字面換行符。
Beginning Visual C# 2010和Code: Generating Multiline String Literals (Visual C#)顯示逐字多行字符串的示例,沒有進一步解釋。
Learning C# 3.0這樣說:
在C#語言,空格,製表符,和換行被認爲是空白....多餘的空格在C#中的語句通常被忽略。 ... 此規則的例外是字符串內的空白符被視爲文字;它不會被忽略。
所以它的文字?這也是我期望的,但事實並非如此。
它甚至包括這個提示框:
提示
Visual Basic程序員注意:在C#中,最終的行沒有特殊的意義。語句以分號結尾,而不是換行符。沒有連續字符,因爲不需要。
(我知道這是在談論字符串之外,但如果它不是一個字符串之外,爲什麼會結束的行具有特殊的意義解析裏面一個字符串?)
有終於找到我自己的方式去了string (C# Reference)本人,我仍然沒有洞察力:
字符串文字可以包含任何字符文字。包括逃逸序列。下面的示例使用轉義序列爲新行
\\
反斜槓,\u0066
爲信f和\n
。
它說,可以使用轉義序列,但它並沒有說他們必須使用。字面換行符不包含在「任何字符文字」中嗎?如果我有一個包含字面製表符而不是其轉義序列\t
的字符串,則不會出現錯誤。但是如果我有一個字面換行符,我會得到一個錯誤。我甚至已經修改了文件的行結束從\r\n
到\n
或\r
沒有效果。
很顯然,我可以從實例,並從它是否包含文字換行字符需要逐字字符串Visual Studio中的錯誤推斷,但一切我讀過表明,不應該是這樣的。爲什麼區別?
我認爲這可能是其中一種「因爲這就是語言如何工作」的事情。它可能是受其他語言的啓發,新的C#程序員會來自這些語言。正如你所提到的,你可以使用@前綴來定義一個逐字串常量。 –
@MikeChristensen哦,是的,我試着用像我在C/C++中看到的反斜線轉義字面換行符。那裏也沒有運氣。 – Wiseguy