私はC#を学び始めていますが、通常の文字列リテラル(つまり、" "
)にリテラルの改行文字を含めることができない理由がわかりません。(私はエスケープシーケンスについて話していません\n
)。複数行の文字列には逐語的な文字列リテラル(つまり)を使用する必要があることは知っています@" "
が、なぜですか?
通常の文字列では使用できないと明示的に述べられているのを見たことがありません。それ以上に、これに逐語的な文字列を使用できると言及されている場合を除いて、私が読んだすべてのことは、リテラルの改行文字が通常の文字列リテラルで許可されることを示唆しているようです。
Visual C#2010およびコードの開始:複数行文字列リテラルの生成(Visual C#)は、詳細な説明なしで逐語的な複数行文字列の例を示しています。
C#3.0を学ぶと、次のようになります。
C#言語では、スペース、タブ、および改行は空白と見なされます。C#ステートメントでは、余分な空白は通常無視されます。...この規則の例外は、文字列内の空白がリテラルとして扱われることです。無視されません。
それで、それは文字通りですか?それも私が期待することですが、そうではありません。
このヒントボックスも含まれています:
ヒント
VisualBasicプログラマーは注意してください:C#では、行末は特別な意味を持ちません。ステートメントは、改行文字ではなくセミコロンで終了します。必要がないため、行継続文字はありません。
(これは文字列の外側について話していることを理解していますが、文字列の外側にない場合、行末が文字列の内側で特別な構文解析の重要性を持つのはなぜですか?)
ついに文字列(C#リファレンス)自体への道を見つけましたが、それでも洞察は得られませんでした。
文字列リテラルには、任意の文字リテラルを含めることができます。エスケープシーケンスが含まれています。
\\
次の例では、円記号、\u0066
文字f、および\n
改行にエスケープシーケンスを使用しています。
エスケープシーケンスを使用できると書かれていますが、使用する必要があるとは書かれていません。リテラルの改行文字は「任意の文字リテラル」に含まれていませんか?エスケープシーケンスの代わりにリテラルタブ文字を含む文字列がある場合\t
、エラーは発生しません。しかし、文字通りの改行があると、エラーが発生します。ファイルの行末を「効果なし」から「効果なし」に変更し\r\n
まし\n
た\r
。
明らかに、例とVisual Studioエラーから、リテラルの改行文字が含まれている場合は逐語的な文字列が必要であると推測できますが、私が読んだすべてのことは、そうではないことを示唆しています。なぜ違いがあるのですか?