Форматирование строки в столбцы

Есть classный способ взять что-то вроде этого:

  Имя клиента - Город, штат - ID
 Боб Вейли - Хаусвилл, TN - 322
 Марли Винчестер - Старый город, Калифорния - 5653

и отформатируйте его примерно так:

  Имя клиента - Город, штат - ID
 Боб Вейли - Хаусвилл, TN - 322
 Марли Винчестер - Старый город, Калифорния - 5653

Использование команд форматирования строк?

Я не слишком зациклен на том, что делать, если очень долго. Например, это было бы в порядке:

  Имя клиента - Город, штат - ID
 Боб Вейли - Хаусвилл, TN - 322
 Марли Винчестер - Старый город, Калифорния - 5653
 Человек из Супер Города - имя длинного города, 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 изменяет пространство, которое может выдержать форматирование удаления пространства в раскрывающемся списке.

Вы можете указать количество столбцов, занимаемых текстом, а также выравнивание с помощью Console.WriteLine или с помощью String.Format :

 // 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 – нет способа сделать это это автоматически.

В дополнение к ответу Томаса я просто хочу указать, что интерполяция строк может использоваться в 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}"; 
Давайте будем гением компьютера.