Подтвердить что ты не робот

Каков дополнительный аргумент в интерполированной строке С#?

Интерполированные строки - одна из новых возможностей С# 6.0.

В соответствии с MSDN синтаксис встроенных выражений С# может содержать необязательное значение, разделенное запятыми, которое считается <optional-comma-field-width> в документации.

К сожалению, я не нашел, для чего это поле.

Из его имени можно подумать, что это значение устанавливает максимальный размер поля "интерполированное", но когда я пытаюсь выполнить следующее выражение:

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

Я получаю следующий вывод:

Process name is LINQPad.UserQuery
4b9b3361

Ответ 1

Это минимальная ширина, используемая для этого поля, а не максимальная. Поскольку ваша строка длиннее 5 символов, которые вы указываете для ширины, поле расширяется до длины вашей строки. Вы увидите разницу более резко с большей шириной:

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

выходы:

Process name is                                  LINQPad.UserQuery

Положительный размер поля выровнен по правому краю; отрицательный размер поля выравнивается по левому краю.

Документация лучше на странице составного форматирования MSDN:

Необязательный компонент выравнивания представляет собой целое число со знаком, указывающее предпочтительную ширину отформатированного поля. Если значение выравнивания меньше длины отформатированной строки, выравнивание игнорируется, а длина отформатированной строки используется в качестве ширины поля. Отформатированные данные в поле выравниваются по правому краю, если выравнивание положительное, и по левому краю, если выравнивание отрицательное. Если необходимо заполнение, используется пробел. Запятая обязательна, если указано выравнивание.

Ответ 2

Число - это выравнивание, зарегистрированное в компоненте выравнивания здесь.

Отформатированные данные в поле выравниваются по правому краю, если выравнивание равно положительный и выровненный по левому краю, если выравнивание отрицательное.

В вашем примере выравнивание будет помещать p.ProcessName в пробелы, если длина символа меньше 5. Если длина строки меньше абсолютного значения выравнивания (как в вашем примере), выравнивание не влияет.

Пример

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");

Результат

xMyTextx
xMyTextx
x    MyTextx
xMyText    x