web-dev-qa-db-fra.com

Lignes d'interpolation de chaîne longue en C # 6

J'ai constaté qu'alors que l'interpolation de chaîne est vraiment agréable lorsqu'elle est appliquée aux appels de format de chaîne de ma base de code existante, compte tenu de la limite de colonne généralement recommandée, la chaîne devient rapidement trop longue pour une seule ligne. Surtout quand les expressions interpolées sont complexes. Avec une chaîne de format, vous avez une liste de variables que vous pouvez diviser en plusieurs lignes.

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

Quelqu'un a-t-il un moyen privilégié de briser ces lignes?

Je suppose que vous pourriez faire quelque chose comme:

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

Vous pouvez divisez la ligne en plusieurs lignes, mais je ne dirais pas que la syntaxe semble plus agréable.

Vous devez utiliser le $@ syntaxe pour utiliser une chaîne interpolée mot à mot, et vous pouvez placer des nouvelles lignes à l'intérieur de la chaîne {...} paramètres, comme ceci:

string s = $@"This is all {
    10
    } going to be one long {
    DateTime.Now
    } line.";

La chaîne ci-dessus ne contiendra pas de saut de ligne et aura un contenu comme celui-ci:

Tous les 10 vont être une longue ligne 01.08.2015 23.49.47.

(note, format norvégien)

Cela dit, je n’arrêterai pas d’utiliser string.Format. À mon avis, certaines de ces expressions d’interpolation de chaînes semblent vraiment bonnes, mais les plus complexes commencent à devenir très difficiles à lire. Étant donné que, sauf si vous utilisez FormattableString, le code sera compilé dans un appel à String.Format de toute façon, je dirais: continuez avec String.Format où cela a du sens.

167

Vous pouvez combiner $ et @ ensemble pour obtenir une interpolation de chaîne et un littéral de chaîne multiligne:

var str = $@"some text { obj1.property }
     more text { obj2.property }";

Mais cela vous donnera un caractère NewLine entre les deux, ce qui pourrait ne pas être ce que vous voulez.

52
MarcinJuraszek

Alors que OP a demandé autre chose, je m'attends à ce que beaucoup de lecteurs de cette question souhaitent une interpolation multiligne $"" qui fonctionne comme @"". Pour ce faire, utilisez $@""

$@"Height: {height}
Width: {width}
Background: {background}"
15
Colonel Panic

J'ai utilisé StringBuilder dans ToString () surchargé comme exemple.

    // 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();
    }
1