有几个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来实现任何控制台格式化。†例如,以下代码将一个对象列表按照类似于使用string.Format
时固定列宽为10的网格格式进行格式化:
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)
})
)
));
它看起来比纯的string.Format更复杂,但现在它可以定制化。例如:
如果您想要根据内容自动调整列的大小,请将AddColumns(10, 10, 10, 10, 10)
替换为AddColumns(-1, -1, -1, -1, -1)
(-1
是GridLength.Auto
的快捷方式,您有更多的大小选项,包括控制台窗口宽度的百分比)。
如果您想要将数字列右对齐,请向单元格的初始化程序添加{ Align = Right }
。
如果您想要着色某一列,请向单元格的初始化程序添加{ Color = Yellow }
。
您可以更改边框样式等。
† CsConsoleFormat是由我开发的。