在Console.WriteLine方法中格式化字符串

26

我刚开始学习C#编程。能否有人解释一下以下代码:

Console.WriteLine( "{0}{1,10}", "Face", "Frequency" ); //Headings
Console.WriteLine( "{0,4}{1,10}",someval,anotherval);
我知道这段代码会输出两列带有给定标题的值,并且{0}表示第一个给定的参数。但是形如{x,y}的格式字符串是什么意思?
3个回答

61

它在左侧添加填充。非常有用的是以下速查表,可帮助记忆各种字符串格式化模式:

.NET String.Format 速查表

正值将在左侧添加填充,负值则在右侧添加填充。

Sample                                 Generates
String.Format("[{0, 10}]", "Foo");     [∙∙∙∙∙∙∙Foo]
String.Format("[{0, 5}]", "Foo");      [∙∙Foo]
String.Format("[{0, -5}]", "Foo");     [Foo∙∙]
String.Format("[{0, -10}]", "Foo");    [Foo∙∙∙∙∙∙∙]

1
感谢您的回复0xA3。如果我理解正确,这是否意味着{1,10}会打印第二个参数,并紧接着打印10个空格? - Joe
@Joe:不,填充意味着字符串被填充到指定的长度,参见我回答中的示例。 - Dirk Vollmar
2
就我所见,这个备忘单完全是错的!使用了错误的索引,并且正负对齐与实际情况相反。因此,要生成 [∙∙∙∙∙∙∙Foo],你实际上需要执行 String.Format("[{0, 10}]", "Foo"); - Graham Clark

8

当您看到{x,y}时,x表示参数索引,y表示对齐方式,如此处所述(链接)。完整的语法如下:

{index[,alignment][:formatString]}

3

这是一个填充值...如果参数不是指定的长度,它会插入空格。

例如,如果您有{0,10},并且{0}的参数为“Blah”,则实际打印的值将是"Blah<SPACE><SPACE><SPACE><SPACE><SPACE><SPACE>"... Blah,多出6个空格以组成长度为10的字符串

ps-不确定如何放置实际的空格...无疑需要查找SO faq


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接