C#复合格式{0,"+n+"}中+n+作用及输出空格原因解析
代码示例
你提问涉及的C#代码如下:
int n=6; string a=null; for(int i=0;i<=n;i++){ Console.WriteLine("{0,"+n+"}",a+="#"); }
问题解答
"{0,"+n+"}"里的+n+就是基础的字符串拼接操作:C#中用+连接字符串和其他类型值时,会自动把非字符串值转成字符串拼入最终结果。你的代码里n赋值为6,所以这段拼接完成后,实际传给Console.WriteLine的格式字符串是{0,6}——n是格式规则的组成部分,不是待输出的内容,自然不会直接打印出n的值。
你看到输出空格而不是n,是因为不了解C#复合格式的占位符语法。格式占位符的完整结构为{参数索引[,对齐宽度][:格式描述]},逗号后跟随的整数是对齐规则参数,不会作为内容输出:
- 对齐宽度为正数时,内容右对齐,若内容实际长度小于指定宽度,不足的位置用空格补在内容左侧
- 对齐宽度为负数时,内容左对齐,不足宽度的空格补在内容右侧
你代码里拼出来的{0,6},实际含义是:将传入的第0个参数(也就是每次循环拼接得到的a字符串)按右对齐规则输出,内容总占6个字符宽度。
循环从i=0到i=6共执行7次,每次a会多拼接一个#:
- 第1次循环
a为1个#,长度1,左侧补5个空格 - 第2次循环
a为2个#,长度2,左侧补4个空格 - 以此类推,直到最后一次循环
a为7个#,长度超过指定宽度6,就不会补空格直接输出
最终运行结果是一个右对齐的、由#组成的直角三角形,你看到的空格就是为了满足对齐宽度要求补的占位空格。
内容的提问来源于stack exchange,提问作者user17308766
相关产品推荐
相关产品推荐

