從一個列表中選擇項目 - Spectre Console 系列
[[academy-video-youtube({"vid": "6HNgqAILhuw", "start_time": "0", "title": "從列表中選擇項目—Spectre Console系列", "creator": "Tim Corey", "length": "6m 26s"})]]
Spectre Console 是一個強大的 NuGet 套件,讓開發者可以為 .NET 建立互動式的主控台應用程式,而非單純的靜態文字程式。 其中一個最有用的功能是 Spectre Console 選擇提示,這讓您可以提供一個選項清單,讓使用者可以直接用鍵盤滾動並選擇。 這使得主控台輸入比讓人們手動輸入答案更可靠、更友善且視覺上更精緻。
在他的视频"從列表中選擇項目—Spectre Console 系列"中,Tim Corey 顯示了如何使用這個功能。 在這篇文章中,我們將逐步跟隨他的解釋並指出時間標記,以便您可以一邊觀看一邊編碼。 這是一個學習如何在您自己的 .NET 主控台應用程式中建立和自訂選擇提示的好方法。
課程介紹
在 0:00,Tim 解釋 Spectre Console 可以讓開發者將 C# 主控台應用程式轉變為視覺吸引且資訊豐富的應用程式。 他的系列影片是以 10 分鐘的段落介紹這個程式庫,並在描述中連結了源程式碼。
在這堂課程中(0:18),Tim 著重介紹如何要求使用者從列表中選擇一個選項,然後使用鍵盤來導航這個列表。這種"問答"模式是構建現代互動式主控台應用程式的基礎。他還提醒觀眾(0:27)訂閱他的頻道並存取 iamtimcorey.com 獲得更多的培訓資源。
建立選擇提示
在 0:34,Tim 展示了一個在他應用程式中常用的佔位符名稱列表。 如果您想要一個"喜愛水果"的例子,這同樣可以是一個水果列表——蘋果、香蕉、橙子。 他設置了一個字串型別的變數來保存使用者選擇的答案:
string favoriteName;string favoriteName;
然後在 0:57,Tim 從上一課程的基本提示轉進到完整的 SelectionPrompt 功能:
favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);favoriteName = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("Which is your favorite placeholder name")
.AddChoices(names)
);他解釋說(1:13),SelectionPrompt 需要一個標題,在他的例子中是"您最喜歡的佔位符名稱是什麼。" 如果您要詢問喜歡的水果,則應相應地更改標題為"您最喜歡的水果是什麼。"
雖然您可以使用 Spectre Console 的樣式(例如使用藍色、綠色或灰色)裝飾文字(1:24),但在這堂課中他專注於選擇提示本身。
在1:39,Tim 調用 .AddChoices() 加入了選項——他的名稱列表。 這些選項可以是任何東西:水果、數字、物件,甚至是"搜尋"功能的結果。
最後,在 1:55,Tim 使用 Spectre Console 的標註行將選擇的項目顯示給使用者:
AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");AnsiConsole.MarkupLine($"Your favorite name is [red]{favoriteName}[/].");這使用行內標註將選擇的答案顯示為紅色,但如果您的主控台主題需要,您也可以很容易地使用藍色或綠色。
運行選擇提示
Tim 在 2:34 儲存並運行程式碼。主控台展示:
一個名稱或水果的列表。
上下箭頭鍵可讓您向上或向下移動(2:41)。
- 按 Enter 選擇一個項目。
Tim 示範選擇"Sue Storm"(2:50)。 一旦按下 Enter,列表消失,主控台輸出:
Your favorite name is Sue Storm.Your favorite name is Sue Storm.如果這是一個水果列表,您可能會看到:"您最喜歡的水果是香蕉"或"您最喜歡的水果是蘋果。"
處理長列表
Tim 接著處理一個常見問題:長列表。 在 3:13,他引入了 PageSize 屬性來限制可見項目數:
.PageSize(4).PageSize(4)他解釋(3:19),四是故意設置的小數量以演示功能。 一次僅顯示這麼多項目。 如果您有一個大的水果列表—蘋果、香蕉、橙子、芒果、鳳梨—PageSize 防止主控台無限滾動。
為了引導使用者,Tim 在 3:34 用灰色新增了一個 MoreChoicesText 訊息:
.MoreChoicesText("[grey](Move down to reveal more choices)[/]").MoreChoicesText("[grey](Move down to reveal more choices)[/]")這段文字告訴使用者他們可以向下移動以顯示更多選項。 當列表較大且您想要明確提示而不是冒著出錯或混淆的風險時,這特別有用。
展示長列表行為
Tim 在 4:08 再次運行程式:
初始僅顯示四個選項。
灰色訊息說"向下移動以顯示更多選項"(4:13)。
向下滾動顯示其他項目。
- 向上滾動再次顯示第一批項目(4:20)。
Tim 指出(4:25)這對於大型列表最理想—無需無限主控台滾動。 您可以一次顯示 10 或 15 個項目,然後讓使用者翻頁查看其餘項目。這解決了一次產生過多輸出的問題。
為什麼選擇提示比輸入更好
在 4:38,Tim 強調為何選擇提示比輸入更好:
一旦您做出選擇,列表會消失(4:41)。
- 您會立即看到您選擇的答案(4:45)。
他將這與舊的提示(5:05)進行比較,以前使用者必須輸入"yes"或"no"。通過 SelectionPrompt,您可以直接提供這些選擇並讓使用者用箭頭鍵選擇,從而減少錯誤並使體驗更流暢。
Tim 說(5:35)這個提示是一個"非常酷的附加",因為它簡化了輸入,使主控台應用程式更具互動性,並為輸入問題提供了明確的解決方案。
其他用途及未來主題
Tim 提到(5:43)這堂課程涵蓋了從列表中選擇一個項目。在未來的影片中,他將會展示多選提示(5:39),使用者可以切換多個項目並按下 Enter 確認。
他也提及(5:47)列表可以是任何物件型別 - 字串、整數、水果,甚至是函式返回的預設選項。 例如,您可以詢問使用者他們最喜歡的水果("蘋果"、"香蕉"、"橙子")而不是名字(5:55)。
利用 Spectre Console 的選擇提示,您甚至可以設置預設值,處理必需的答案,並自訂選擇後要採取的行動。
結論
Tim 結束影片時(6:01)重申這就是如何在 Spectre Console 中實作項目選擇——一種乾淨、對使用者友好的方式來處理主控台應用程式中的列表。 無論您在詢問喜歡的水果、數字還是物件,選擇提示都能為您的應用程式提供極佳的體驗,無需多餘的輸入或錯誤。
Tim Corey 影片的關鍵要點
Spectre Console 的 SelectionPrompt 允許使用者使用箭頭鍵導航列表,而不是手動輸入。
可通過標題、選項、顏色(藍色、綠色、灰色)、PageSize 和 MoreChoicesText 自訂以幫助顯示更多選擇。
一旦選擇項目,列表消失,並顯示選擇的答案。
適用於長短列表,防止主控台滾動問題。
適用於任何資料型別(字串、數字、水果如蘋果、香蕉、橙子,或自定義物件)。
- Tim 將在未來的影片中報導多選提示,使用者可以切換多個選項,然後按下 Enter 確認。

