String-Konstante für eine neue Zeile + tab?
Möchte ich ein C# 4 string-Konstanten repräsentieren eine neue Zeile und eine Registerkarte, wie im folgenden:
internal const string segment = "\r\n\t";
Ich weiß, es ist Umwelt.Newline ich denke mal, dass ich verwenden könnte, wie diese:
internal const string segment = Environment.NewLine + "\t";
Meine Frage ist, was ist die effizienteste Art und Weise zu konstruieren, die eine string-Konstante, hat eine neue Linie und eine Registerkarte?
- Die zweite ist besser, da es Plattform-unabhängig
- Effizient in whay Art und Weise? Lesbarkeit? Reine Geschwindigkeit? OS Portabilität? "\r\n\t" wird Ihnen wahrscheinlich geringfügig bessere Leistung, aber möglicherweise nicht geeignet für alle Umgebungen, einschließlich Browser, Windows/Unix, etc).
- Im Gegenteil, der Wert der zweiten absolut hängt von der Plattform ab.
- aber, weil der Wert des Ausdrucks hängt von der Plattform ab, die Richtigkeit des Codes nicht. Ich würde auch beachten, dass da Umweltschutz.NewLine ist eine Eigenschaft, es kann nicht verwendet werden, in die ein konstanter Ausdruck sein, so ist die zweite Erklärung des Segments, der sich ändern muss, um erfolgreich kompiliert (wie bereits in Reed Copsey Antwort)
- Jon ist richtig, hier, obwohl - die zweite ist eine funktional andere option als die erste. Ich vermute, das Ziel ist die Umwelt.NewLine, aber es gibt spezielle Fälle (wie den, der versucht, ein bestehendes Protokoll), wo
\r\n
möglicherweise die richtige Wahl für alle ausführenden Plattform. Es gibt keine Möglichkeit zu wissen, welche option ist die richtige für eine bestimmte Plattform, ohne weitere Informationen. - vereinbart. Ich wollte nur darauf hinweisen, dass der Begriff "Plattform-unabhängig" kann verwirrend sein: Wir schaffen die Plattform-unabhängige Dinge (z.B., .NET-assembly) durch die Verwendung von Plattform-abhängigen Elemente (z.B. CLR-jit-compiler).
- ja @JonSkeet dafür würde der code unabhängig von der Plattform sein
- Den Wert der Zeichenfolge hängt von der Plattform ab. Es kann gut sein, dass die Plattform-spezifischen string-Wert ist das gewünschte Verhalten, aber ich nennen würde, des Wertes, änderungen, basierend auf welcher Plattform Sie verwenden, ein Plattform-spezifisches (nicht plattformunabhängig) Stück code.
- Ich dachte, wir diskutieren über die Frage und den code nicht einfach den NewLine-Wert. Ja den NewLine-Wert in der Tat an eine bestimmte Plattform gebunden. Das war der springende Punkt.
- Nun, du hast behauptet, dass die zweite Zeile des Codes wurde Plattform-unabhängig. Ich denke, es wäre viel klarer zu sagen, es ist eine portable Möglichkeit zu schaffen, ein string, der die Plattform-spezifische line-separator, gefolgt von einem tab.
- Hat 2 mal kompilieren? Ich bekomme, "der Ausdruck zugewiesen wird-segment muss konstant sein." Doh! Lesen Sie weiter in dem thread.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Sie deklarieren die Zeichenfolge als
const
wie oben beschrieben, es gibt absolut keinen Unterschied in Bezug auf die Effizienz. Jede Konstante ersetzt werden zur compile-Zeit nutzen und ein Praktikum string.Leider die zweite option ist nicht eine compile-Zeit-Konstanten, und werden nicht kompiliert. Um es zu nutzen, müssten Sie erklären es als:
Ich persönlich finde dies sehr deutlich in Bezug auf die Absicht, und es wäre meine Präferenz, auch wenn es nicht zu einem compile-Zeit-Konstante. Der zusätzliche Aufwand/Verlust der Effizienz ist so unglaublich gering sein, dass würde ich persönlich wählen, die klare Absicht und lesbare Codes über die compile-Zeit-Konstante.
Beachten Sie, dass die Verwendung
Environment.NewLine
hat auch den Vorteil, dass richtige wenn Sie port diesen code auf Mono, und Ihr Ziel ist es, die aktuellen Plattformen line separator. Die erste falsch sein, auf nicht-Windows-Plattformen, die in diesem spezifischen Fall. Wenn Ihr Ziel ist, die speziell gehören"\r\n\t"
, und habe nicht den Wunsch, die Plattform-spezifische line-separator, dannEnvironment.NewLine
eine ungeeignete Wahl.const
wird nicht funktionieren. verwendenstatic readonly
.readonly
verhindert.Environment.NewLine
ist nicht konstant und kann so nicht verwendet werden, die bei der Schaffung einerconst
.Reine Geschwindigkeit, Effizienz dann der erste Sieg, vor allem, da das zweite nicht gemacht werden
const
- und dann können nicht zusammengestellt werden.Immer noch, der zweite ist zu sehr verdammt schnell in der Tat, ich würde also nicht kümmern.
Viel wichtiger ist, dass diese einfach nicht das gleiche.
Geht es um "warum werden Sie mit Hilfe \r\n\t"?
Wenn Sie \r\n\t, weil Sie auf Windows und auf Windows-Zeilenumbrüche werden normal \r\n, dann sollten Sie auf jeden Fall nutzen:
Die andere falsch wäre, und könnte die Einführung bugs, die Sie nicht für Jahre zu kommen.
Wenn Sie \r\n denn Sie arbeiten mit einer Spezifikation, die sagt, "separate Segmente mit einem CRLF gefolgt von einem Tabulator", dann sollten Sie auf jeden Fall nutzen:
Mithilfe der anderen wäre falsch.
Dies ist etwas, das nicht beißen Menschen für real. Windows-Leute schreiben, HTTP-code, der passiert einfach zu verwenden ein Windows-Zeilenumbruch-zwischen-Header zwischen zwei das Kopf-und Körper. Dann wird es portiert auf die Stelle, wo der Zeilenumbruch ist \n, und es bricht, weil HTTP Mandate \r\n egal was das system verwendet. Das gleiche gilt anders herum.
(Unter den strengen - /permissiven Prinzip, es kann auch sein eine gute Idee zu übernehmen, dass anderen code gibt, wird immer dieser falsch ist, und akzeptieren Sie alle die verschiedenen newline-Formen gibt).