webentwicklung-frage-antwort-db.com.de

Deklarieren einer langen Zeichenfolge in C #

Gibt es eine anständige Möglichkeit, eine lange einzeilige Zeichenfolge in C # zu deklarieren, so dass es nicht unmöglich ist, die Zeichenfolge in einem Editor zu deklarieren und/oder anzuzeigen?

Die Optionen, die mir bekannt sind, sind:

1: Lass es laufen. Das ist schlecht, weil Ihr String sich auf der rechten Seite des Bildschirms befindet und ein Entwickler, der die Nachricht liest, lästig scrollen und lesen muss.

string s = "this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  this is my really long string.  ";

2: + Zeilenumbrüche. Im Code sieht das gut aus, führt jedoch neue Zeilen in die Zeichenfolge ein. Wenn Sie möchten, dass im Code "Nice" angezeigt wird, erhalten Sie nicht nur Zeilenumbrüche, sondern auch unhandliche Leerzeichen am Anfang jeder Zeile der Zeichenfolge.

string s = @"this is my really long string.  this is my long string.
             this line will be indented way too much in the UI. 
This line looks silly in code.  All of them suffer from newlines in the UI.";

3: "" + ... Das funktioniert gut, ist aber beim Schreiben sehr frustrierend. Wenn ich irgendwo eine halbe Zeile Text hinzufügen muss, muss ich alle Arten von + aktualisieren und den Text überall hin verschieben.

string s = "this is my really long string.  this is my long string. " + 
           "this will actually show up properly in the UI and looks " +
           "pretty good in the editor, but is just a pain to type out " +
           "and maintain";

4: string.format or string.concat. Grundsätzlich wie oben, jedoch ohne Pluszeichen. Hat die gleichen Vor- und Nachteile.

Gibt es wirklich keine Möglichkeit, dies gut zu machen?

28
Cory

Es hängt davon ab, wie die Saite verwendet wird. Alle Antworten hier sind gültig, aber der Kontext ist wichtig. Wenn der lange String "s" protokolliert wird, sollte er mit einem Test für den Logging-Guard umgeben sein, wie zum Beispiel das folgende Log4net-Beispiel:

if (log.IsDebug) {
    string s = "blah blah blah" + 
    // whatever concatenation you think looks the best can be used here,
    // since it's guarded...
}

Wenn die lange Zeichenfolge s einem Benutzer angezeigt wird, ist die Antwort von Developer Art die beste Wahl ... die sollte in der Ressourcendatei sein.

Für andere Zwecke (Erzeugen von SQL-Abfragezeichenfolgen, Schreiben in Dateien [aber berücksichtigen Sie erneut Ressourcen für diese], usw.), in denen Sie mehr als nur Literale verketten, sollten Sie StringBuilder als Wael Dalloul als Vorschlag betrachten, insbesondere wenn Sie dies tun string könnte möglicherweise zu einer Funktion führen, die zu einem späteren Zeitpunkt in einer zeitkritischen Anwendung oft aufgerufen wird (All diese Aufrufe summieren sich). Ich mache das zum Beispiel, wenn ich eine SQL-Abfrage aufbaue, bei der ich Parameter habe, die Variablen sind. 

Abgesehen davon weiß ich nichts von etwas, das sowohl hübsch aussieht als auch leicht einzugeben ist (obwohl der Vorschlag zum Umbruch von Words eine schöne Idee ist, kann er nicht in verschiedene Tools, Code-Ausdrucke oder Code-Review-Tools übersetzt werden ). Das sind die Pausen. (Ich persönlich benutze den Pluszeichen-Ansatz, um die Zeilenumbrüche für unsere Ausdrucke und Code-Reviews ordentlich zu gestalten).

7
Ogre Psalm33

Da ist ein Weg. Setzen Sie Ihre sehr lange Zeichenfolge in Ressourcen. Sie können sogar lange Textteile dort ablegen, weil dort die Texte sein sollen. Sie direkt im Code zu haben, ist eine sehr schlechte Praxis.

61
user151323

Wenn Sie Visual Studio verwenden

Tools > Options > Text Editor > All Languages > Word Wrap

Ich bin sicher, dass jeder andere Texteditor (einschließlich Notizblock) das kann!

8
stevehipwell

Muss es in der Quelldatei definiert werden? Andernfalls definieren Sie es in einer Ressourcen- oder Konfigurationsdatei.

6
d91-jal

Wenn Sie wirklich diese lange Zeichenfolge im Code haben möchten und das End-Quote-Plus-Beginnen-Zitat wirklich nicht eingeben möchten, können Sie Folgendes versuchen.

string longString = @"Some long string, 
    with multiple whitespace characters 
    (including newlines and carriage returns)
    converted to a single space
    by a regular expression replace.";

longString = Regex.Replace(longString, @"\s+", " ");
5
John Fisher

sie können StringBuilder folgendermaßen verwenden:

StringBuilder str = new StringBuilder();
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
str.Append("this is my really long string.  this is my long string. ");
string s = str.ToString();

Sie können auch Folgendes verwenden: Textdateien, Ressourcendatei, Datenbank und Registrierung.

5
Wael Dalloul

Ich persönlich würde einen so großen String aus einer Datei lesen, vielleicht aus einem XML-Dokument.

3
James

Für wirklich lange Zeichenfolgen würde ich es in XML (oder einer Ressource) speichern. In Fällen, in denen es sinnvoll ist, es im Code zu haben, verwende ich die mehrzeilige Stringverkettung mit dem +-Operator. Ich kann mir nur vorstellen, wo ich das mache, in meinen Unit-Tests für Code, der XML liest und parst, wo ich eigentlich versuche, die Verwendung einer XML-Datei zum Testen zu vermeiden. Da es sich um einen Unit-Test handelt, möchte ich fast immer, dass sich die Zeichenfolge auch dort befindet. In solchen Fällen kann ich sie alle in eine # region-Direktive aufteilen, damit ich sie nach Bedarf anzeigen/ausblenden kann.

2
tvanfosson

Sie können StringBuilder verwenden

1
Jimmeh

Verwenden Sie den Project / Properties / Settings aus dem oberen Menü von Visual Studio. Machen Sie den scope = "Application".

Im Feld "Wert" können Sie sehr lange Zeichenfolgen eingeben und als Bonuszeilen werden Feeds beibehalten. Dann kann Ihr Code auf diese Zeichenfolge wie folgt verweisen: 

string sql = Properties.Settings.Default.xxxxxxxxxxxxx;

0
Max Drawbaugh

wenn Sie es wirklich im Code halten müssten, wie wäre es dann mit @ + Zeilenumbrüchen und dann mit einer einfachen Funktion, um die Zeilenumbrüche zu entfernen.

0
Hassan Voyeau

Ich lasse es entweder einfach laufen oder verwende string.format und schreibe den String in eine Zeile (die let-it-run-Methode), setze aber jedes der Argumente in eine neue Zeile, was das Lesen entweder erleichtert oder dem Leser zumindest den Leser gibt eine Idee, was er in der langen Saite erwarten kann, ohne sie im Detail zu lesen.

0
David Božjak