有几个可以帮助格式化的NuGet软件包。在某些情况下,的功能string.Format
已足够,但是您可能至少要根据内容自动调整列的大小。
ConsoleTableExt
ConsoleTableExt是一个简单的库,允许格式化表格,包括不带网格线的表格。(一个更流行的软件包ConsoleTables似乎不支持无边界表。)下面是一个示例,该示例使用列的大小根据其内容来格式化对象的列表:
ConsoleTableBuilder
.From(orders
.Select(o => new object[] {
o.CustomerName,
o.Sales,
o.Fee,
o.Value70,
o.Value30
})
.ToList())
.WithColumn(
"Customer",
"Sales",
"Fee",
"70% value",
"30% value")
.WithFormat(ConsoleTableBuilderFormat.Minimal)
.WithOptions(new ConsoleTableBuilderOption { DividerString = "" })
.ExportAndWriteLine();
CsConsoleFormat
如果您还需要更多功能,则可以使用CsConsoleFormat来实现任何控制台格式。†例如,此处将对象列表的格式设置为固定列宽为10的网格,就像在其他答案中使用的那样string.Format
:
ConsoleRenderer.RenderDocument(
new Document { Color = ConsoleColor.Gray }
.AddChildren(
new Grid { Stroke = LineThickness.None }
.AddColumns(10, 10, 10, 10, 10)
.AddChildren(
new Div("Customer"),
new Div("Sales"),
new Div("Fee"),
new Div("70% value"),
new Div("30% value"),
orders.Select(o => new object[] {
new Div().AddChildren(o.CustomerName),
new Div().AddChildren(o.Sales),
new Div().AddChildren(o.Fee),
new Div().AddChildren(o.Value70),
new Div().AddChildren(o.Value30)
})
)
));
它看起来可能比pure更复杂string.Format
,但是现在可以对其进行自定义。例如:
如果要根据内容自动调整列的大小,请替换AddColumns(10, 10, 10, 10, 10)
为AddColumns(-1, -1, -1, -1, -1)
(-1
是的快捷方式GridLength.Auto
,您可以使用更多调整大小的选项,包括控制台窗口宽度的百分比)。
如果要在右侧对齐数字列,请添加{ Align = Right }
到单元格的初始化程序。
如果要为列着色,请添加{ Color = Yellow }
到单元格的初始化程序。
您可以更改边框样式等。
†CsConsoleFormat由我开发。