从列表中选择项目 - Spectre 控制台系列
Spectre Console 是一款功能强大的 .NET NuGet 软件包,它可以让开发人员构建交互式控制台应用程序,而不是纯静态文本程序。 它最有用的功能之一是 Spectre 控制台选择提示,它允许您显示一个选项列表,用户可以直接用键盘滚动和选择。 与手动输入答案相比,这将使控制台输入更加可靠、用户友好和视觉精美。
在他的视频"从列表中选择项目 - 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)。 按下回车键后,列表消失,控制台输出:
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)与以前用户必须键入 "是 "或 "否 "的提示进行了比较。有了 SelectionPrompt,您可以直接提供这些选择,并让用户使用箭头键进行选择,从而减少错误,使体验更加流畅。
蒂姆说(5:35)提示符是一个 "非常酷的补充",因为它简化了输入,使控制台应用程序更具交互性,并为输入问题提供了明确的解决方案。
其他用途和未来主题
Tim 提到(5:43)本课涉及从列表中选择一个项目。在今后的视频中,他将展示多选提示(5:39),用户可以在其中切换多个项目,然后按 Enter 键确认。
他还指出(5:47),列表可以是任何对象类型--字符串、整数、果实,甚至是函数返回的默认选项。 例如,您可以提示用户他们最喜欢的水果("苹果"、"香蕉"、"橙子"),而不是名称(5:55)。
利用 Spectre Console 的选择提示功能,您甚至可以设置默认值、处理必填答案并自定义选择后的操作。
结论
Tim 在视频的最后(6:01)重申,这就是您在 Spectre Console 中实现项目选择的方式--一种简洁、用户友好的方式来处理控制台应用程序中的列表。 无论您是询问最喜欢的水果、数字还是对象,选择提示都能为您的应用程序带来完美的体验,而不会出现额外的键入或错误。
从 Tim Corey 的视频中获得的主要启示
Spectre Console 的 SelectionPrompt 可让用户使用箭头键浏览列表,而无需手动输入。
自定义标题、选项、颜色(蓝色、绿色、灰色)、页面大小和 MoreChoicesText,以帮助显示更多选项。
一旦选择了一个项目,列表就会消失,并显示所选答案。
既适合短列表,也适合长列表,防止出现控制台滚动问题。
适用于任何数据类型(字符串、数字、苹果、香蕉、橙子等水果或自定义对象)。
- Tim 将在今后的视频中介绍多选项提示,用户可以在其中切换多个选项,然后按 Enter 键确认。

