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

插值字符串是C#6.0的新function之一。

根据MSDN,嵌入式C#表达式的语法可以包含一个可选的逗号分隔值,在文档中视为

不幸的是,我没有找到这个领域的用途。

从它的名称可以认为这个值设置了“插值”字段的最大大小,但是当我尝试以下表达式时:

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

我得到以下输出:

 Process name is LINQPad.UserQuery 

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

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

收益率:

 Process name is LINQPad.UserQuery 

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

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

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

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

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

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

 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