在C#中,使用Spectre.Console库可以极大地增强你的控制台应用程序的外观和用户体验。Spectre.Console是一个强大的库,提供了丰富的功能来格式化输出、创建表格、进度条等,使你的命令行应用看起来更加专业和吸引人。下面是一些Spectre.Console的“骚操作”妙用示例:

1.安装必要的 NuGet 包

C# Spectre.Console 骚操作妙用_Red


1.基本文本输入

使用Spectre.Console,你可以轻松地格式化文本,包括颜色、背景色、粗体、斜体等。

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 1、基本文本输入//姓名var name = AnsiConsole.Ask<string>("请输入您的姓名:");//年龄  var age = AnsiConsole.Ask<int>("请输入您的年龄:");//职业  var work = AnsiConsole.Ask<string>("请输入您的职业:");//显示输入结果  AnsiConsole.WriteLine($"您好,{name}!您今年 {age} 岁,从事{work}");Console.ReadKey();#endregion}}
}

C# Spectre.Console 骚操作妙用_Red_02

2.加密输入(密码)

对于敏感信息,Spectre.Console 提供了 Secret() 方法来隐藏用户的输入:

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 2、加密输入//默认以 * 掩盖密码  var password = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret());//使用自定义字符掩盖密码  var customMaskedPassword = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret('|'));//完全隐藏输入(不显示任何字符)  var invisiblePassword = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret('\0'));Console.ReadKey();#endregion}}
}

C# Spectre.Console 骚操作妙用_Red_03

3.选择菜单实现

Spectre.Console 提供了 SelectionPrompt<T> 类用于创建单选菜单,让用户从多个选项中选择一个。

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 3、选择菜单实现var fruit = AnsiConsole.Prompt(new SelectionPrompt<string>().Title("请选择您喜欢的编程语言:").PageSize(8) // 一页显示的选项数量  .AddChoices(new[] {"C#", "C++", "Java", "Python", "JavaScript", "Go", "PHP", "Ruby",}));AnsiConsole.MarkupLine($"您选择了:[green]{fruit}[/]");Console.ReadKey();#endregion}}
}

C# Spectre.Console 骚操作妙用_输入验证_04

C# Spectre.Console 骚操作妙用_Red_05

4.基本输入验证

Spectre.Console 提供了强大的输入验证功能,可以确保用户输入的数据符合预期的格式和条件。

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 4、基本输入验证// 验证年龄输入(必须在 1-180 之间)  var age = AnsiConsole.Prompt(new TextPrompt<int>("请输入您的年龄:").Validate(age => {if (age < 1 || age > 180)return ValidationResult.Error("[red]年龄必须在 1-180 之间[/]");return ValidationResult.Success();}));Console.ReadKey();#endregion}}
}

C# Spectre.Console 骚操作妙用_输入验证_06

5.ASCII 艺术标题

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 5、ASCII 艺术标题AnsiConsole.Write(new FigletText("hello  Kay").Centered().Color(Color.FromInt32(new Random().Next(1, 255))));#endregion}}
}

C# Spectre.Console 骚操作妙用_Red_07

6.密码强度验证

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 6、密码强度验证var passWord = AnsiConsole.Prompt(new TextPrompt<string>("请重置您的密码:").Secret().Validate(password => {if (password.Length < 8)return ValidationResult.Error("[red]密码长度必须至少为 8 个字符[/]");if (!password.Any(c => char.IsDigit(c)))return ValidationResult.Error("[red]密码必须包含至少一个数字[/]");if (!password.Any(c => char.IsUpper(c)))return ValidationResult.Error("[red]密码必须包含至少一个大写字母[/]");if (!password.Any(c => char.IsLower(c)))return ValidationResult.Error("[red]密码必须包含至少一个小写字母[/]");if (!password.Any(c => !char.IsLetterOrDigit(c)))return ValidationResult.Error("[red]密码必须包含至少一个特殊字符[/]");return ValidationResult.Success();}));Console.ReadKey();#endregion}}
}

C# Spectre.Console 骚操作妙用_Red_08

7.完整代码

using Spectre.Console;namespace ConsoleApp2
{internal class Program{static void Main(string[] args){//公众号AnsiConsole.Write(new FigletText("欢迎关注公众号《编程光年》").Color(Color.Red));AnsiConsole.MarkupLine("[red]欢迎关注公众号[/] [blue]《编程光年》[/]");#region 1、基本文本输入//姓名var name = AnsiConsole.Ask<string>("请输入您的姓名:");//年龄  var age = AnsiConsole.Ask<int>("请输入您的年龄:");//职业  var work = AnsiConsole.Ask<string>("请输入您的职业:");//显示输入结果  AnsiConsole.WriteLine($"您好,{name}!您今年 {age} 岁,从事{work}");Console.ReadKey();#endregion#region 2、加密输入//默认以 * 掩盖密码  var password = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret());//使用自定义字符掩盖密码  var customMaskedPassword = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret('|'));//完全隐藏输入(不显示任何字符)  var invisiblePassword = AnsiConsole.Prompt(new TextPrompt<string>("请输入您的密码:").Secret('\0'));Console.ReadKey();#endregion#region 3、选择菜单实现var fruit = AnsiConsole.Prompt(new SelectionPrompt<string>().Title("请选择您喜欢的编程语言:").PageSize(8) // 一页显示的选项数量  .AddChoices(new[] {"C#", "C++", "Java", "Python","JavaScript", "Go", "PHP", "Ruby",}));AnsiConsole.MarkupLine($"您选择了:[green]{fruit}[/]");Console.ReadKey();#endregion#region 4、基本输入验证// 验证年龄输入(必须在 1-180 之间)  var ageNew = AnsiConsole.Prompt(new TextPrompt<int>("请输入您的年龄:").Validate(ageNew =>{if (ageNew < 1 || ageNew > 180)return ValidationResult.Error("[red]年龄必须在 1-180 之间[/]");return ValidationResult.Success();}));Console.ReadKey();#endregion#region 5、ASCII 艺术标题AnsiConsole.Write(new FigletText("hello  Kay").Centered().Color(Color.FromInt32(new Random().Next(1, 255))));#endregion#region 6、密码强度验证var passWord = AnsiConsole.Prompt(new TextPrompt<string>("请重置您的密码:").Secret().Validate(password => {if (password.Length < 8)return ValidationResult.Error("[red]密码长度必须至少为 8 个字符[/]");if (!password.Any(c => char.IsDigit(c)))return ValidationResult.Error("[red]密码必须包含至少一个数字[/]");if (!password.Any(c => char.IsUpper(c)))return ValidationResult.Error("[red]密码必须包含至少一个大写字母[/]");if (!password.Any(c => char.IsLower(c)))return ValidationResult.Error("[red]密码必须包含至少一个小写字母[/]");if (!password.Any(c => !char.IsLetterOrDigit(c)))return ValidationResult.Error("[red]密码必须包含至少一个特殊字符[/]");return ValidationResult.Success();}));Console.ReadKey();#endregion}}
}