C # 6 apporte la prise en charge du compilateur pour les littéraux de chaîne interpolés avec la syntaxe suivante:
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
C'est parfait pour les chaînes courtes, mais si vous voulez produire une chaîne plus longue, faut-il l'indiquer sur une seule ligne?
Avec d'autres types de chaînes, vous pouvez:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
Ou:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
Je ne peux pas trouver un moyen d'y parvenir avec une interpolation de chaîne sans avoir tout d'une ligne:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
Je me rends compte que dans ce cas, vous pouvez utiliser \r\n
au lieu de Environment.NewLine
(moins portable), ou l'extraire vers un local, mais il y aura des cas où vous ne pourrez pas le réduire en dessous d'une ligne sans perdre la force sémantique.
Est-ce simplement le cas que l'interpolation de chaîne ne devrait pas être utilisée pour les longues chaînes?
Devrions-nous simplement utiliser StringBuilder
pour les chaînes plus longues?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
Ou y a-t-il quelque chose de plus élégant?
Vous pouvez combiner $
et @
ensemble pour obtenir un littéral de chaîne interpolé à plusieurs lignes:
string s =
$@"Height: {height}
Width: {width}
Background: {background}";
Source: Lignes d'interpolation de chaînes longues en C # 6 (Merci à @Ric d'avoir trouvé le fil!)
J'utiliserais probablement une combinaison
var builder = new StringBuilder()
.AppendLine($"Width: {width}")
.AppendLine($"Height: {height}")
.AppendLine($"Background: {background}");
Personnellement, je viens d'ajouter une autre chaîne interpolée en utilisant la concaténation de chaînes
Par exemple
var multi = $"Height : {height}{Environment.NewLine}" +
$"Width : {width}{Environment.NewLine}" +
$"Background : {background}";
Je trouve que c'est plus facile à formater et à lire.
Ceci aura aura une surcharge supplémentaire par rapport à l’utilisation de $ @ "", mais ce n’est visible que dans les applications les plus critiques. En mémoire, les opérations sur les chaînes sont extrêmement économiques par rapport aux E/S de données. Lire une seule variable de la base de données prendra des centaines de fois plus longtemps dans la plupart des cas.