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.pswp.cn/news/286058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286058.shtml
英文地址,請注明出處:http://en.pswp.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、題目 假定輸入的…