using System.Collections.Generic;
public static void Main()
var x = StringTableToString(40, new StringTableColumn() { Start = 0, Count = 16, Text = "Room:" }, new StringTableColumn() { Start = 16, Count = 24, Text = "Room 200" });
foreach (var y in x) Console.WriteLine(y);
Console.WriteLine(String.Format("{0,-16}{1,24}", "Room:", "Room 200"));
public static IEnumerable<string> StringTableToString(int width, params StringTableColumn[] stringTableColumns)
var result = new List<string>();
var lines = Math.Max(1, stringTableColumns.Select(x => x.Text.Length / x.Count).Max());
foreach (var line in Enumerable.Range(0, lines))
var lineString = string.Empty;
foreach (var stringTableColumn in stringTableColumns.OrderBy(x => x.Start))
if (lineString.Length < stringTableColumn.Start) lineString += new string(' ', lineString.Length - stringTableColumn.Start);
lineString += stringTableColumn.Text.Substring((line * stringTableColumn.Count) + stringTableColumn.Start, stringTableColumn.Count - 1);
public int Prop1 { get; set; }
public string Prop2 { get; set; }
public class StringTableColumn
public int Start { get; set; }
public int Count { get; set; }
public string Text { get; set; }