Ich fange an, C# zu lernen, und ich verstehe nicht, warum reguläre Zeichenfolgenliterale (d. H. " "
) keine Literalzeilen enthalten dürfen. (Ich spreche nicht über die Escape-Sequenz \n
). Ich weiß, dass Sie wortgetreue Zeichenfolgenliterale (d. H. @" "
) für mehrzeilige Zeichenfolgen verwenden müssen, aber warum?Warum können Nicht-Verbatim-Zeichenfolgen keine Zeilenumbrüche enthalten?
Ich habe es nicht explizit gesehen erklärt, dass man sie nicht in regelmäßigen Strings verwenden können. Mehr als das, außer wo es im Vorbeigehen erwähnt wird, dass ich verbatim Strings dafür verwenden kann, scheint alles, was ich gelesen habe, darauf hinzudeuten, dass literale Newline-Zeichen in regulären Stringliteralen erlaubt wären.
Beginning Visual C# 2010 und Code: Generating Multiline String Literals (Visual C#) zeigen Beispiele für mehrzeilige Strings ohne weitere Erläuterung.
Learning C# 3.0 sagt dies:
In der Sprache C#, Leerzeichen, Tabulatoren und Zeilenumbrüche in Betracht gezogen werden, wird Leerzeichen .... Zusätzliche Leerzeichen werden im Allgemeinen in C# Aussagen ignoriert. ... Die Ausnahme von dieser Regel ist, dass Leerzeichen innerhalb einer Zeichenfolge als Literal behandelt werden; Es wird nicht ignoriert.
Also ist es buchstäblich? Das würde ich auch erwarten, aber das ist es nicht.
Es enthält auch dieses Tipbox:
Tip
Visual Basic Programmierer zur Kenntnis nehmen: in C#, die End-of-line hat keine besondere Bedeutung. Anweisungen werden mit Semikolons und nicht mit Zeilenvorschubzeichen beendet. Es gibt kein Zeilenfortsetzungszeichen, da keines benötigt wird.
(Ich weiß, dass dies über außerhalb von Strings spricht, aber warum sollte end-of-line haben eine besondere Bedeutung Parsing innerhalb eine Zeichenfolge, wenn sie nicht außerhalb einer Schnur tut?)
Having endlich meinen Weg zum string (C# Reference) selbst gefunden, habe ich noch keinen Einblick bekommen:
Stringliterale können beliebige Zeichenliterale enthalten. Escape-Sequenzen sind enthalten. Im folgenden Beispiel wird die Escape-Sequenz
\\
für Backslash,\u0066
für den Buchstaben f und\n
für Newline verwendet.
Er sagt, dass Escape-Sequenzen verwendet werden kann, aber es sagt nicht, sie verwendet werden müssen. Sind buchstabengetreue Newline-Zeichen nicht in "beliebiges Zeichenliteral" enthalten? Wenn ich eine Zeichenfolge habe, die anstelle der Escape-Sequenz \t
ein Literalzeichen enthält, gibt es keinen Fehler. Aber wenn ich einen Literal Newline habe, bekomme ich einen Fehler. Ich habe sogar die Zeilenenden der Datei von \r\n
zu \n
oder \r
ohne Wirkung geändert.
Natürlich, ich bin in der Lage aus den Beispielen zu schließen und von Visual Studio Fehlern, die wörtliche Zeichenfolge ist erforderlich, wenn es ein wörtliches Newline-Zeichen enthält, aber alles, was ich gelesen habe, läßt vermuten, dass nicht der Fall sein sollte, . Warum der Unterschied?
Ich denke, es ist wahrscheinlich einer dieser "weil so die Sprache funktioniert" Dinge .. Es wurde wahrscheinlich von anderen Sprachen inspiriert, dass neue C# -Programmierer kommen würde. Wie Sie bereits erwähnt haben, können Sie das Präfix @ verwenden, um eine wörtliche String-Konstante zu definieren. –
@MikeChristensen Oh ja, und ich habe versucht, die literale Newline mit einem Backslash zu entkommen, wie ich in C/C++ gesehen habe. Auch kein Glück. – Wiseguy