向控制台新增表格 - Spectre Console 系列
[[academy-video-youtube({"vid": "jpCAgY5nqwc", "start_time": "0", "title": "Adding Tables to Your Console - Spectre Console Series", "creator": "Tim Corey", "length": "10m 24s"})]]
Spectre.Console 是一個強大的 .NET 程式庫,能幫助您建立出美觀的控制台應用程式。 您可以構建有結構的佈局,使用顏色,甚至顯示進度條或互動提示,而不僅僅是簡單的文字輸出。在他的 Spectre Console 系列中,Tim Corey 以簡單、實用的課程向開發者展示了如何充分利用這個程式庫。
在他的视频"Adding Tables to Your Console - Spectre Console Series"中,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 新增行。 在 1:06,Tim 說有三種支持的方式來新增行:
一個 params 列表的 IRenderable 物件(用於像面板、另一個表格或甚至圖表之類的巢狀項目)。
一個 params 列表的字串(最常用)。
- 一個
IEnumerable<IRenderable>(不太常用但可用)。
他首先示範了第二個選擇,新增:
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 Terminal 並再次運行——如今圓角出現了。
Tim 解釋道 (5:59) ,渲染能力取決於您正在使用的終端。 基礎的 shell 只是提供輸出,但終端決定了它能顯示哪些樣式。 Windows Terminal 支援圓角邊框字元; 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<IRenderable> 新增行
在 9:25,Tim 演示了新增行的第三種方式——傳遞一個 IEnumerable<IRenderable>。 他準備了一個 Text 物件的列表:
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,並立即開始將簡單的控制台輸出轉變為結構化、樣式化的顯示。

