2010-06-04 109 views
26

有没有采取这样的一个很酷的方式:格式化字符串转换成列

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; 
     } 
    } 
} 

我正在寻找更好的格式化方法。有任何想法吗?


这是我结束了:

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

的HtmlDecode改变 到可承受的空间除去的下拉列表中的格式化的空间。

回答

54

可以使用String.Format指定使用Console.WriteLine或文本所占据,以及对齐列数:

// Prints "--123  --" 
Console.WriteLine("--{0,-10}--", 123); 
// Prints "--  123--" 
Console.WriteLine("--{0,10}--", 123); 

数目指定要使用的列数和符号指定对齐(-左对齐,+右对齐)。所以,如果你知道可用的列数,你可以写例如是这样的:

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

如果你想计算列基于整个列表上的号码(如最长的名称),那么您需要提前获取该号码并将其作为参数传递给您的DropDownDisplay - 无法自动执行此操作。

+0

好答案!我认为它是有效的,但出于某种原因,查看下拉菜单时,它不起作用。我猜测一些东西是删除额外的空间。 :( – Vaccano 2010-06-04 23:30:46

+0

我需要找一些方法来插入 而不是一个空格 – Vaccano 2010-06-04 23:40:30

+1

如果你需要使用 ,只需要做一个字符串。换行后格式化。return String.Format(“{0,-10} - {1 ,-10},{2,10} - {3,5}“), 姓名,城市,州,ID).Replace(”“,” “); – 2010-06-04 23:48:58

0

除了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}";