web-dev-qa-db-de.com

Lange Interpolationszeilen in C # 6

Ich habe festgestellt, dass die String-Interpolation zwar wirklich gut ist, wenn sie auf die String-Format-Aufrufe meiner vorhandenen Codebasis angewendet wird, angesichts der im Allgemeinen bevorzugten Spaltenbegrenzung wird der String jedoch schnell zu lang für eine einzelne Zeile. Besonders wenn die zu interpolierenden Ausdrücke komplex sind. Mit einer Formatzeichenfolge haben Sie eine Liste von Variablen, die Sie in mehrere Zeilen aufteilen können.

var str = string.Format("some text {0} more text {1}",
    obj1.property,
    obj2.property);

Hat jemand ein bevorzugtes Mittel, um diese Zeilen aufzubrechen?

Ich nehme an, Sie könnten etwas tun wie:

var str = $"some text { obj1.property }" +
  " more text { obj2.property };
108
Jeremiah Gowdy

Sie können die Zeile in mehrere Zeilen aufteilen, aber ich würde nicht sagen, dass die Syntax mehr gut aussieht.

Sie müssen die Syntax [email protected] Verwenden, um einen interpolierten wörtlich String zu verwenden, und Sie können Zeilenumbrüche in die Parameter {...} Einfügen, wie folgt:

string s = [email protected]"This is all {
    10
    } going to be one long {
    DateTime.Now
    } line.";

Die obige Zeichenfolge enthält keine Zeilenumbrüche und enthält tatsächlich folgenden Inhalt:

Dies ist alles, was eine lange Linie sein wird.

(Anmerkung, norwegisches Format)

Nachdem ich das gesagt habe, würde ich nicht aufhören, string.Format Zu verwenden. Meiner Meinung nach sehen einige dieser Zeichenketteninterpolationsausdrücke sehr gut aus, aber komplexere werden sehr schwer zu lesen. Wenn Sie nicht FormattableString verwenden, wird der Code trotzdem zu einem Aufruf von String.Format Kompiliert. Ich würde sagen, machen Sie mit String.Format Weiter, wo es Sinn macht.

Sie können $ Und @ Kombinieren, um eine String-Interpolation und ein mehrzeiliges String-Literal zu erhalten:

var str = [email protected]"some text { obj1.property }
     more text { obj2.property }";

Aber das gibt Ihnen ein NewLine -Zeichen dazwischen, so dass es möglicherweise nicht das ist, was Sie wollen.

52
MarcinJuraszek

Während OP nach etwas anderem fragte, erwarte ich, dass viele Leute, die diese Frage lesen, eine mehrzeilige interpolierte $"" das funktioniert wie @"". Verwenden Sie dazu [email protected]""

[email protected]"Height: {height}
Width: {width}
Background: {background}"
15
Colonel Panic

Ich habe StringBuilder in überschriebenem ToString () als Beispiel verwendet.

    // return employee data
    public override string ToString()
    {
        StringBuilder buffer = new StringBuilder();
        buffer.AppendLine($"Number: {EmployeeNumber}");
        buffer.AppendLine($"Name: {EmployeeName}");
        buffer.AppendLine($"Address: {PostalAddress}");
        buffer.AppendLine($"Phone: {PhoneNumber}");
        buffer.AppendLine($"Age: {EmployeeAge}");
        buffer.AppendLine($"Gender: {EmployeeGender}");
        buffer.AppendLine($"Status: {EmployeeStatus}");
        buffer.AppendLine($"Manager: {EmployeeManager}");
        buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}");
        return buffer.ToString();
    }