首页 > 其他分享 >System.CommandLine参数Argument

System.CommandLine参数Argument

时间:2022-12-06 02:13:07浏览次数:44  
标签:show color showCommand CommandLine System Argument rootCommand 参数 var

  前两篇说到Command和Option,这篇说说Argument。Argument的用法和Option很像,只是他的构造和属性有些差别,再就是在运行输入时有区别,接下来看看实现。

  一个参数

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
    Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
    //这里设置只有一个color参数
    Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color) =>
{
    Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color,true);
    Console.WriteLine($"这是《旦猫》的show命令");
    Console.ResetColor();      
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

  二个参数

  如果当有多个参数时:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
    Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var colorArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
    //这里设置只有一个color参数
    Arity = ArgumentArity.ExactlyOne,
};
//创建参数 times
var timesArgument = new Argument<int>(name: "times", description: "设置输出的次数")
{
    //这里设置只有一个times参数
    Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(colorArgument);
showCommand.AddArgument(timesArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color, int times) =>
{
    for (var i = 1; i <= times; i++)
    {
        Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color, true);
        Console.WriteLine($"这是《旦猫》的show命令");
    }
    Console.ResetColor();
}, colorArgument, timesArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

参数输入值类型转换

  在第一个例子的SetHandler中,我们做了string到ConsoleColor的类型转换,其实这里可以通过参数自带的构造函数参数parse来实现类型转换。代码如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
    Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var showArgument = new Argument<ConsoleColor>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
    Arity = ArgumentArity.ExactlyOne,
};
//类型转换内置方法
ConsoleColor ParseColor<ConsoleColor>(ArgumentResult result)
{
    var color = result.Tokens[0].Value;
    return (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.ToString(), true);
}
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor
showCommand.SetHandler((ConsoleColor color) =>
{
    Console.ForegroundColor = color;
    Console.WriteLine($"这是《旦猫》的show命令");
    Console.ResetColor();
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果如下:

一个参数多个值

当一个参数多个值的时候,实现方式如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
    Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<ConsoleColor[]>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
    Arity = ArgumentArity.OneOrMore,
};
//类型转换内置方法
ConsoleColor[] ParseColor<ConsoleColor>(ArgumentResult result)
{
    var colors = new List<ConsoleColor>();
    foreach (var color in result.Tokens)
    {
        colors.Add((ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.Value.ToString(), true));
    }
    return colors.ToArray();
}

//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor数组
showCommand.SetHandler((ConsoleColor[] colors) =>
{
    foreach (var color in colors)
    {
        Console.ForegroundColor = color;
        Console.WriteLine($"这是《旦猫》的show命令");
        Console.ResetColor();
    }
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果:

  想要更快更方便的了解相关知识,可以关注微信公众号 

 

 

标签:show,color,showCommand,CommandLine,System,Argument,rootCommand,参数,var
From: https://www.cnblogs.com/axzxs2001/p/16954084.html

相关文章

  • System.CommandLine参数Argument
    前两篇说到Command和Option,这篇说说Argument。Argument的用法和Option很像,只是他的构造和属性有些差别,再就是在运行输入时有区别,接下来看看实现。一个参数//创......
  • System.CommandLine选项Option
    前一篇简单看了一下CommandLine命令的使用,其实在一个命令行工具中,还有一个重要的点,那就是选项——Option,选项是为命提供参数,就好像C#中方法,Command就像方法,Option就像......
  • 看看《System.CommandLine》
    记得之前出过几篇.nettool工具的文章,当时的做法是所有工具的语法分析全部自己解释,自己执行,语法的解释占了大部分时间,反而工具的功能被弱化了。其实微软有一个Com......
  • 看看《System.CommandLine》
    记得之前出过几篇.nettool工具的文章,当时的做法是所有工具的语法分析全部自己解释,自己执行,语法的解释占了大部分时间,反而工具的功能被弱化了。其实微软有一个Com......
  • System.CommandLine选项Option
    前一篇简单看了一下CommandLine命令的使用,其实在一个命令行工具中,还有一个重要的点,那就是选项——Option,选项是为命提供参数,就好像C#中方法,Command就像方法,Option就像......
  • Linux 下 hwclock 读写 RTC 报错 Invalid argument
    以上错误信息都是因为year设置不当引起的。没有设置RTC,RTC也不会启动计时。下面首先设置正确的系统时间,然后将系统时间传递给RTC。tm里的tm_year是从1900年开始算的,如要......
  • started to fail (cannot connect to [[192.168.2.1]:10051]: [4] Interrupted system
    52340:20221025:160139.474activecheckconfigurationupdatefrom[192.168.2.1:10051]startedtofail(cannotconnectto[[192.168.2.1]:10051]:[4]Interrupted......
  • Pyrhon初学错误解决:TypeError: Student() takes no arguments
    初学python类方法,报错:TypeError:类对象 Student()takesnoarguments,代码及截图如下:  经排查:类对象Student()的初始化函数init书写错误,两边的下划线为分别为两个下......
  • Winform程序打包工具NSIS(Nullsoft Scriptable Install System)
    NSIS(NullsoftScriptableInstallSystem)是一个开源的Windows系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS......
  • Control of Mobile Robots 学习笔记(二、三)Mobile robot, Linear system
    《Controlofmobilerobot》是Gatech的Dr.MagnusEgerstedt在Coursera上发布的一个公开课(现在好像没在Coursera了,这位老师也不在Gatech了)。之前没有自主移动机器人方面......