System.CommandLine参数Argument

前两篇说到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);

运行结果:

4a98c66084ddc8ae582d80f4b1c28725.png

二个参数

如果当有多个参数时:

//创建根命令
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);

运行结果:

4e29127013ebeea9465e2db59b62eec2.png

参数输入值类型转换

在第一个例子的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);

结果如下:

9b0b6d5a4552bf8d710eb8c148e1a523.png

一个参数多个值


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

//创建根命令
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);

结果:

fe0c4556e476eae036b02d9e410bdb20.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 迭代器

迭代器&#xff08;Iterator&#xff09;模式&#xff0c;又叫做游标&#xff08;Cursor&#xff09;模式。GOF给出的定义为&#xff1a;提供一种方法访问一个容器&#xff08;container&#xff09;对象中各个元素&#xff0c;而又不需暴露该对象的内部细节。 百度百科: http:…

Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

我本来是不想学习kotlin的&#xff0c;但是现在的形势&#xff0c;很多公司都在使用kotlin开发&#xff0c;可以说学会kotlin也是无奈之举&#xff0c;既然是潮流&#xff0c;谷歌也在大力推广&#xff0c;所以还是只能硬着头皮逼迫自己学一下&#xff0c;也能更快适应公司的需…

GitHub中watch、star、fork的作用

star 的作用是收藏&#xff0c;目的是方便以后查找。watch 的作用是关注&#xff0c;目的是等作者更新的时候&#xff0c;你可以收到通知。fork 的作用是参与&#xff0c;目的是你增加新的内容&#xff0c;然后 Pull Request&#xff0c;把你的修改和主仓库原来的内容合并。最早…

【MATLAB统计分析与应用100例】案例015:matlab读取Excel数据,进行值聚类分析

1. 聚类分析轮廓图 2. matlab完整代码 %*****计算例9.1的距离矩阵 x = [1, 2, 6, 8, 11];

C语言试题五十五之m个人的成绩存放在score数组中,请编写函数function,它的功能是:将高于平均分的人数作为函数值返回,将高于平均分的分数放在high所指定的数组中。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 m个人的成…

01超精美渐变色动态背景完整示例【CSS动效实战(纯CSS与JS动效)】

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本节案例如下&#xff08;其他动效篇幅原因逐步讲解&#xff0c;欢迎三…

Liferay 用本地私服(nexus) 打包部署Portlet应用

当我们使用搭建一个nexus本地仓库&#xff0c;并且配置settings.xml来让应用启用这个仓库。我们使用Liferay 6.1.10的archetype来创建liferay portlet, 如下图&#xff1a; 当我们运行命令mvn package liferay:deploy时&#xff0c;会出现以下错误&#xff1a; [DEBUG] Using c…

.NET Core 分布式事务 CAP 发布 6.1 正式版

前言我们很高兴宣布 CAP 发布 6.1 版本正式版&#xff0c;在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性。那么&#xff0c;接下来我们具体看一下吧。总览可能有些人还不知道 CAP 是什么&#xff0c;老规矩来一个简介。CAP地址&#xff1a;h…

【MATLAB统计分析与应用100例】案例016:matlab读取Excel数据,进行样品系统聚类分析

1. 聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化 [X,textdata] = xlsread(examp09_02.xls); % 从Excel文件中读取数据 X = zscore(X

解决React Native报错:Error:Found unexpected optical bounds (red pixel)

问题背景 同样是在升级 gradle plugin V2.2.3 --> gradle plugin V3.0.1后&#xff0c;运行至打包APK期间报错&#xff1a; Error:found unexpected optical bounds (red pixel) on top border at x14.&#xff08;错误&#xff1a;在X14的上边框上发现意外的光学边界&am…

C语言试题五十六之计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

webpack 入门

什么是WebPack&#xff0c;为什么要使用它&#xff1f; 为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用&#xff0c;它们拥有着复杂的JavaScript代码和一大堆依赖包。为了简化开发的复杂度&#xff0c;前端社区涌现出了很多好的实践方法 模块化&#xff0c;让我…

mysql 列类型

列类型整型 tinyint&#xff0c;smallint&#xff0c;mediumint,int,bigint (可选参数unsigned &#xff0c;&#xff08;M&#xff0c;zerofill&#xff0c;结合使用才有意义&#xff09;)浮点型 float(可选参数D,M) decimal&#xff08;可选参数D&#xff0c;M&#xff09;字…

使用vsftp虚拟用户实现安全访问控制

一、ftp连接方式 1、命令连接 ftp在与用户交互时&#xff0c;首先打开的是TCP的21号端口&#xff0c;建立命令连接&#xff0c;这个连接会始终存在&#xff0c;直到用户输入bye的那一刻&#xff0c;才断开命令连接。 2、数据连接 1&#xff09;主动连接 主动连接是基于TCP21号端…

【前端就业课 第二阶段】CSS 零基础到实战(04)定位

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、定位 定位分为相对定位以及绝对定位。 相对定位可以理解为在 HTM…

Android TextView设置ClickableSpan 点击结尾空白位置也响应点击的问题

解决办法&#xff0c;在后边紧接着追加一个0宽度字符&#xff1a; builder.append("\u200b"); 相关知识&#xff1a; “\u200b” 为 Unicode Character ‘ZERO WIDTH SPACE’ (U200B)&#xff0c;可用于内容标识&#xff0c;不占位数&#xff08;宽度0&#xff0…

【MATLAB统计分析与应用100例】案例017:matlab读取Excel数据,进行变量系统聚类分析

1. 变量系统聚类分析结果 2. matlab完整代码 (1)读取数据,并转为距离向量 [X,textdata] = xlsread(examp09_03.xls); % 从Excel文件中读取数据 y = 1 -

WinForm 之 窗口最小化到托盘及右键图标显示菜单

日常开发有时候需要实现窗口最小化到系统托盘&#xff0c;本文就来讲讲该如何实现winfrom最小化到系统托盘&#xff0c;本例子基于VS2019编写。用C#开发winform桌面程序时&#xff0c;程序启动后&#xff0c;默认是显示在桌面而且在任务栏中有对应的图标。有的时候&#xff0c;…

C语言学习笔记--函数与指针

1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值、参数类型和参数个数共同决定。如 int add(int i,int j)的类型为 int(int,int)。 (2)C 语言中通过 typedef 为函数类型重命名 typedef type name(parameter list);//如 typedef int f(int,int); 2. 函数指针 (…

C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 假定输入的…