什么是字符串格式C#{0,12:N0}(冒号和逗号)是什么意思?

Rob*_*iam 3 c#

好的,这是代码示例:

 string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                "City", "Year", "Population", "Change (%)");
  Console.WriteLine(header);
  string output;      
  foreach (var city in cities) {
     output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                            city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                            (city.Item5 - city.Item3)/ (double)city.Item3);
     Console.WriteLine(output);
  }
 }
}
// The example displays the following output:
//    City            Year  Population    Year  Population    Change (%)
//    
//    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
//    New York        1940   7,454,995    1950   7,891,957         5.9 %
//    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
//    Detroit         1940   1,623,452    1950   1,849,568        13.9 %
Run Code Online (Sandbox Code Playgroud)

我知道args {0:N0}意味着没有小数后的冒号,但是昏迷呢?像{0,-12}和{1,12}字符串格式的参数后逗号的含义是什么?

Ian*_*Ian 11

MSDN文档是你的朋友(我上面评论中给出的链接也不是最好的):
复合格式

每个格式项采用以下形式,由以下组件组成:{index [,alignment] [:formatString]}

所以index显然是提供的参数的索引:

String.Format("Second argument = {1}, first argument = {0}", arg1, arg2);
Run Code Online (Sandbox Code Playgroud)

Alignment 指定所需的字段宽度和水平对齐:

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

String.Format("{0,-12}" +    // first argument, left align, 12 character wide column
              "{1,8:yyyy}" + // second argument, right align, 8 character wide column,
                             // formatted as a year
              "{2,12:N0}" +  // third argument, right align, 12 character wide column,
                             // formatted as a number, 0 decimal places
Run Code Online (Sandbox Code Playgroud)

并且formatString您已经了解(例如,数字("N")格式说明符).


Son*_*nül 5

它们是索引组件对齐组件,它们是复合格式的一部分。这是复合格式化语法;

{index[,alignment][:formatString]}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,{0,-12}{1,12}01是索引组件,它指向您想要格式化的前两个元素。和-1212对齐组件。它们可以是负值或正值。

正值表示向右对齐,负值表示向左对齐。

如果你想使用对齐组件,你必须用逗号将它与索引组件分开。正如语法中所见,冒号 ( :) 分隔对齐部分。formatString

由于您使用{0,-12}for "Los Angeles"(这是字符),它将与左侧的11一个 ( ) 空白字符对齐。12 - 11

Console.WriteLine("{0, -12}{1}", "Los Angeles", "1940"); // prints "Los Angeles 1940"
Run Code Online (Sandbox Code Playgroud)

但是Chicago(这是字符),它将向左7对齐五个 ( ) 空白字符;12 - 7

Console.WriteLine("{0, -12}{1}", "Chicago", "1940"); // prints "Chicago     1940"
Run Code Online (Sandbox Code Playgroud)

对于正值;

Console.WriteLine("{0, 12}{1}", "Los Angeles", "1940"); // prints " Los Angeles1940"
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine("{0, 12}{1}", "Chicago", "1940"); // prints "     Chicago1940"
Run Code Online (Sandbox Code Playgroud)