C# 内插字符串中的可选参数有什么用?

What is the optional argument in C# interpolated string for?

内插字符串是 C# 6.0 的新功能之一。

根据 MSDN,嵌入式 C# 表达式的语法可以包含一个可选的逗号分隔值,在 documentation.

中视为 <optional-comma-field-width>

很遗憾,我没有找到此字段的用途。

从它的名字来看,人们可能会认为这个值设置了 "interpolated" 字段的最大大小,但是当我尝试以下表达式时:

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

我得到以下输出:

Process name is LINQPad.UserQuery

数字是对齐方式,记录在对齐组件here

The formatted data in the field is right-aligned if alignment is positive and left-aligned if alignment is negative.

在您的示例中,alignment 将在 p.ProcessName 长度小于 5 个字符时用空格填充。如果字符串长度小于 alignment 的绝对值(如您的示例),则 alignment 无效。

例子

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

这是用于该字段的最小宽度,而不是最大。由于您的字符串比您为宽度指定的 5 个字符长,因此该字段会扩展到您的字符串的长度。宽度越长,差异越显着:

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

产量:

Process name is                                  LINQPad.UserQuery

正的字段大小是右对齐的;负字段大小是左对齐的。

文档在 MSDN 的 Composite Formatting 页面上更好:

The optional alignment component is a signed integer indicating the preferred formatted field width. If the value of alignment is less than the length of the formatted string, alignment is ignored and the length of the formatted string is used as the field width. The formatted data in the field is right-aligned if alignment is positive and left-aligned if alignment is negative. If padding is necessary, white space is used. The comma is required if alignment is specified.