将字符串格式化为列

Vac*_*ano 38 c# string string-formatting

有一种很酷的方法可以采取这样的方式:

Customer Name - City, State - ID
Bob Whiley - Howesville, TN - 322
Marley Winchester - Old Towne, CA - 5653

并将其格式化为这样的:

Customer Name     - City,       State - ID
Bob Whiley        - Howesville, TN    - 322
Marley Winchester - Old Towne,  CA    - 5653

使用字符串格式命令?

如果一个人很长,我不会太沮丧.例如,我可以这样做:

Customer Name     - City,       State - ID
Bob Whiley        - Howesville, TN    - 322
Marley Winchester - Old Towne,  CA    - 5653
Super Town person - Long Town Name, WA- 45648 

提供一些背景信息.我有一个下拉框,显示与此非常相似的信息.现在我在下拉列表中创建项目的代码如下所示:

public partial class CustomerDataContract
{
    public string DropDownDisplay
    {
        get
        {
             return  Name + " - " + City + ",  " + State + " - " + ID;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更好地格式化的方法.有任何想法吗?


这就是我最终得到的结果:

HttpContext.Current.Server.HtmlDecode(
    String.Format("{0,-27} - {1,-15}, {2, 2} - {3,5}", 
    Name, City, State, ID)
    .Replace(" ", " "));
Run Code Online (Sandbox Code Playgroud)

HtmlDecode将空间更改为可以承受空间删除下拉列表格式的空间.

Tom*_*cek 63

您可以使用Console.WriteLine或使用String.Format以下命令指定文本占用的列数以及对齐:

// Prints "--123       --"
Console.WriteLine("--{0,-10}--", 123);
// Prints "--       123--"
Console.WriteLine("--{0,10}--", 123);
Run Code Online (Sandbox Code Playgroud)

该数字指定要使用的列数,符号指定对齐(-左对齐,+右对齐).所以,如果您知道可用的列数,您可以编写例如以下内容:

public string DropDownDisplay { 
  get { 
    return String.Format("{0,-10} - {1,-10}, {2, 10} - {3,5}"),
      Name, City, State, ID);
  } 
} 
Run Code Online (Sandbox Code Playgroud)

如果您想根据整个列表计算列数(例如最长名称),那么您需要提前获取该数字并将其作为参数传递给您DropDownDisplay- 没有办法做到这一点自动.


wil*_*ush 9

除了 Tomas 的回答之外,我只想指出字符串插值可以在 C# 6 或更高版本中使用。

// with string format
var columnHeaders1 = string.Format($"|{0,-30}|{1,-4}|{2,-15}|{3,-30}|{4,-30}|{5,-30}|{6,-30}", "ColumnA", "ColumnB", "ColumnC", "ColumnD", "ColumnE", "ColumnF", "ColumnG");

// with string interpolation
var columnHeaders2 = $"|{"ColumnA",-30}|{"ColumnB",-4}|{"ColumnC",-15}|{"ColumnD",-30}|{"ColumnE",-30}|{"ColumnF",-30}|{"ColumnG",-30}";
Run Code Online (Sandbox Code Playgroud)