web-dev-qa-db-fra.com

À quoi sert l'argument facultatif dans la chaîne interpolée C #?

Les chaînes interpolées sont l'une des nouvelles fonctionnalités de C # 6.0.

Selon MSDN, la syntaxe des expressions C # incorporées peut contenir une valeur facultative, séparée par des virgules, considérée comme <optional-comma-field-width> dans documentation .

Malheureusement, je n'ai pas trouvé à quoi sert ce champ.

D'après son nom, on pourrait penser que cette valeur définit la taille maximale du champ "interpolé", mais lorsque j'essaie l'expression suivante:

var p = Process.GetCurrentProcess();
Console.WriteLine($"Process name is {p.ProcessName, 5}");

J'obtiens la sortie suivante:

Process name is LINQPad.UserQuery
27
Alexander Galkin

C'est la largeur minimale à utiliser pour ce champ, et non la largeur maximale . Étant donné que votre chaîne est plus longue que les 5 caractères que vous spécifiez pour la largeur, le champ est étendu à la longueur de votre chaîne. Vous verrez la différence de façon plus spectaculaire avec une largeur plus longue:

var p = Process.GetCurrentProcess();
$"Process name is {p.ProcessName, 50}".Dump();

rendements:

Process name is                                  LINQPad.UserQuery

Une taille de champ positive est justifiée à droite; une taille de champ négative est justifiée à gauche.

La documentation est meilleure sur la page Formatage composite de MSDN:

Le composant d'alignement facultatif est un entier signé indiquant la largeur de champ formaté préférée. Si la valeur de l'alignement est inférieure à la longueur de la chaîne formatée, l'alignement est ignoré et la longueur de la chaîne formatée est utilisée comme largeur de champ. Les données formatées dans le champ sont alignées à droite si l'alignement est positif et alignées à gauche si l'alignement est négatif. Si un rembourrage est nécessaire, un espace blanc est utilisé. La virgule est requise si l'alignement est spécifié.

46
D Stanley

Le nombre est le alignement, documenté dans le composant d'alignement ici .

Les données formatées dans le champ sont alignées à droite si l'alignement est positif et alignées à gauche si l'alignement est négatif.

Dans votre exemple, alignement remplira le p.ProcessName avec des espaces s'il est inférieur à 5 Longs caractères. Lorsque la longueur de la chaîne est inférieure à la valeur absolue de alignement (comme dans votre exemple), alignement n'a aucun effet.

Exemple

var text = "MyText";
Console.WriteLine($"x{text}x");
Console.WriteLine($"x{text, 3}x");
Console.WriteLine($"x{text, 10}x");
Console.WriteLine($"x{text, -10}x");

Résultat

xMyTextx
xMyTextx
x    MyTextx
xMyText    x
17
Stafford Williams