在控制台中添加表格 - Spectre 控制台系列
Spectre.Console 是一个功能强大的 .NET 库,可帮助您创建精美的控制台应用程序。 您可以构建结构化布局、使用颜色,甚至显示进度条或交互式提示,而不是纯文本输出。在他的 Spectre Console 系列中,Tim Corey 通过实用的小课程向开发人员展示了如何充分利用这个库。
在"为您的控制台添加表格--Spectre Console 系列"视频中,Tim 重点介绍了 Spectre.Console 表格。 表格是一项核心功能,可以通过对齐、填充、边框和样式来显示结构化数据。 我们将深入了解 Tim 的演练,以便您了解如何准确使用这一功能。
开始使用 Spectre.Console.
在开始部分(0:00),Tim 解释说 Spectre.Console 可以让您创建视觉效果好、信息量大的应用程序。 它以名为 Spectre.Console 的 NuGet 软件包的形式发布。 您可以使用以下工具轻松安装
// dotnet add package spectre console
dotnet add package Spectre.Console// dotnet add package spectre console
dotnet add package Spectre.Console安装该库后,在控制台应用程序中展示信息将变得更加容易。 Tim 还指出了视频中提供的文档和源代码链接,供有兴趣了解更多示例的人参考。
创建您的第一个表格
Tim 在 0:35 开始编码。他创建了一个 Table 对象:
var table = new Table();var table = new Table();然后,他使用 AddColumn 添加了三列:
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");这就形成了基本结构。 他解释说,以后每一列都可以有自己的宽度、对齐方式和样式。
接下来,他使用 AddRow 添加行。 Tim 在 1:06 说有三种支持添加行的方法:
1.IRenderable 对象的参数列表(用于嵌套项目,如面板、另一个表格甚至图表)。
2.由字符串组成的参数列表(最常见)。
3.IEnumerable
他首先演示了第二种方案,并补充道:
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");这样,表格中就有了两行数据。 在 3:26 分,Tim 提醒观众必须使用 AnsiConsole.Write(table)(而不是 WriteLine)才能在终端中显示类似表格的 IRenderable:
AnsiConsole.Write(table);AnsiConsole.Write(table);当他运行程序时,控制台会显示一个格式整齐的表格,表头和行自动对齐。 即使只有几行代码,Spectre 也能让控制台输出看起来更专业。

对齐和展开表格
4:00 时,Tim 演示了如何控制表格在屏幕上的位置。 例如:
table.Centered();table.Centered();这将在控制台窗口的中央显示整个表格。 他解释说,这种设置影响的是整个表格,而不是列。 您也可以将表格右对齐或左对齐。 默认值为左。

然后,他在 5:01 处演示了 table.Expand(),使表格填满整个终端窗口的宽度。 一旦展开,居中位置就不起作用了,因为表格现在占据了所有可用空间。 默认为折叠式表格。

添加边框和了解终端支持
接下来,Tim 在 5:21 处添加了一个边框:
table.Border(TableBorder.Rounded);table.Border(TableBorder.Rounded);他在 Visual Studio 的控制台中运行应用程序,发现边角不是圆的。 5:54 时,他切换到 Windows 终端并重新运行,现在出现了圆角。
Tim 解释说(5:59),渲染能力取决于您使用的终端。 底层 shell 只提供输出,但终端决定可以显示哪些样式。 Windows 终端支持圆角边框字符; Visual Studio 的集成控制台不提供这些功能。 这同样适用于颜色、标记或您可能添加的斜体、下划线或粗体文本样式。
他在 7:01 显示,即使是 Visual Studio 之外的开发人员命令提示符也能正确渲染,因为它使用的是不同的终端。 如果您正在试用进度条、长时间运行的任务或表格等 Spectre 功能,请记住这一点:并非所有终端都能显示所有样式。
添加行分隔符
Tim 还指出,为了清晰起见,可以在行与行之间显示分隔符:
table.ShowRowSeparators();table.ShowRowSeparators();这将在每一行之间画一条水平线,这样就可以在较大的表格中更方便地扫描信息--尤其是当您要构建显示大量输出或动态处理参数的 CLI 工具时。
列级样式:填充、宽度、对齐
Spectre.Console 表格的优势之一是您可以单独定制每一列。 8:02 时,Tim 修改了第一栏:
table.Columns[0].PadLeft(5).PadRight(5);table.Columns[0].PadLeft(5).PadRight(5);这就在文本两侧增加了衬垫。 然后,他在第二列设置了固定宽度:
table.Columns[1].Width(15);table.Columns[1].Width(15);最后,他对该栏目的内容进行了右对齐:
table.Columns[1].RightAligned();table.Columns[1].RightAligned();当他在 9:10 再次运行该程序时,你可以看到第一列被填充,第二列被设置为固定宽度,内容被右对齐。 即使是标题文本也要尊重这些设置。 Tim 指出(8:42),宽度的单位是字符,而不是像素。
填充、对齐和固定宽度这些细小的润色会使您的控制台应用程序更具可读性。 结合 Spectre 的颜色、标记和面板,您可以创建感觉更接近 GUI 但完全在控制台中运行的输出。

从 IEnumerable添加行
9:25 时,Tim 演示了添加行的第三种方法--通过传递 IEnumerable
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);使用集合插入另一行。 Tim 认为,在日常代码中,这个选项 "用处不大",但如果您要从其他来源(如文件数据、单元测试框架或交互式提示)动态生成行,则可以使用这个选项。

总结
在 视频(9:59)的最后,Tim 做了总结:Spectre.Console 表格为您提供了以整洁和结构化的方式呈现信息的强大功能。 您可以控制表格的对齐方式、宽度和边框样式,添加行分隔符,为列应用填充,甚至嵌入面板或其他可呈现的内容。
由于该库深受现代 CLI 设计的启发,它不仅支持表格,还支持长期运行任务的进度指示器、图表、粗体、斜体、下划线和颜色(如蓝色或绿色文本)等标记。 Tim 鼓励读者查看文档并尝试使用示例,了解 Spectre 如何让您的控制台输出更吸引人。
通过 Tim Corey 的逐步演示,您将了解 Spectre.Console 如何让您以最小的投入构建精美的控制台应用程序。 安装 NuGet 软件包,探索 API,现在就开始将普通的控制台输出转换为结构化、风格化的显示。

