C#插值字符串中的可选参数是什么?

Ale*_*kin 27 .net c# string-interpolation c#-6.0

插值字符串是C#6.0的新功能之一.

根据MSDN,嵌入式C#表达式的语法可以包含一个可选的逗号分隔值,如文档<optional-comma-field-width>中所述.

不幸的是,我没有找到这个字段的用途.

从名称可以看出,这个值设置了"插值"字段的最大大小,但是当我尝试以下表达式时:

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

我得到以下输出:

Process name is LINQPad.UserQuery
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 47

它是用于该字段的宽度.由于您的字符串长于您为宽度指定的5个字符,因此该字段将扩展为字符串的长度.你会看到更长的宽度更显着的差异:

var p = Process.GetCurrentProcess();
$"Process name is {p.ProcessName, 50}".Dump();
Run Code Online (Sandbox Code Playgroud)

收益率:

Process name is                                  LINQPad.UserQuery
Run Code Online (Sandbox Code Playgroud)

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

MSDN 的" 复合格式"页面上的文档更好:

可选的对齐组件是一个有符号整数,表示首选的格式化字段宽度.如果alignment的值小于格式化字符串的长度,则忽略alignment,并将格式化字符串的长度用作字段宽度.如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则对齐左对齐.如果需要填充,则使用空格.如果指定了对齐,则需要逗号.


Sta*_*ams 17

数字是对齐,在此处对齐组件中记录.

如果对齐为正,则字段中的格式化数据右对齐,如果对齐为负,则对齐左对齐.

在您的示例中,如果空格小于字符长,则对齐将填充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");
Run Code Online (Sandbox Code Playgroud)

结果

xMyTextx
xMyTextx
x    MyTextx
xMyText    x
Run Code Online (Sandbox Code Playgroud)