在 C# 中解析命令列引數
這篇文章將介紹使用 C# 程式語言解析命令列引數。我們將研究兩種方法和策略來完成這一目標。
命令的標準格式是 commandName -argumentName argumentValue
,其中 commandName
是命令的名稱。以 Linux 中使用的著名的 apt
命令為例。
apt install exiftool
在 C#
使用 CommandLineParser
中解析引數
你可以使用諸如 CommandLineParser
之類的庫來為你執行任務,而不是手動解析命令和引數,因此你不必擔心它。然後你的主要注意力可能會去把命令邏輯付諸行動。
我們將向你展示如何開發允許 CommandLineParser
接收引數並以以下方式執行你的命令的程式碼。
static void Main(string[] args) {
Parser.Default.ParseArguments<UpdateCommand, InstallCommand>(args).WithParsed<ICommand>(
t => t.Execute());
}
首先,你必須安裝 NuGet
包,可以通過執行以下命令來完成。
Install-Package CommandLineParser
如果你的命令不存在,請為它們建立一個基類或介面。另一方面,構建介面使你可以在程式碼中僅使用一個 .WithParsed<ICommand>
。
public interface ICommand {
void Execute();
}
必須先新增 UpdateCommand
,然後新增 Verb
屬性。此引數指示 CommandLineParser
在遇到單詞 update
時生成一個 UpdateCommand
物件。
[Verb("update", HelpText = "updates your system to the newest version")]
public class UpdateCommand : ICommand {
public void Execute() {
Console.WriteLine("Updating the system");
}
}
此時放入 InstallCommand
和 install
命令的 message
引數。包括 Message
屬性和 Option
屬性作為直接結果。
此屬性為 CommandLineParser
提供有關將引數轉換為屬性的說明。
[Verb("install", HelpText = "installing your software")]
public class InstallCommand : ICommand {
[Option("message", Required = true, HelpText = "installing the program")]
public string Message { get; set; }
public void Execute() {
Console.WriteLine($"Executing install for the : {Message}");
}
}
最後,將引數作為型別引數傳遞給 CommandLineParser
以解析它們。
在 C#
中使用 If-Else
語句解析引數
下面是解析命令列引數的示例。
static void Main(string[] args) {
if (!(args.Length != 0)) {
Console.WriteLine("arguments not correct");
return;
}
}
讀取 static void Main(string[] args)
的行的目的是從命令列獲取引數並將它們儲存在 args
陣列中。if (!(args.Length != 0))
行檢查總引數的長度是否為 0。
如果長度為 0,則表明沒有向程式提供命令列引數。
讀取 Console.WriteLine("arguments not correct");
的行在螢幕上顯示引數不正確,以便使用者下次輸入正確數量的引數。
var c = args[0];
var c = args[0];
line 建立變數名 c
並儲存在命令列中傳遞的第一個引數。
if (c == "update") {
update();
} else if (c == "install") {
if (args.Length == 2)
install(args[1]);
} else {
Console.WriteLine("Invalid Command");
}
我們將確定變數 c
是否在通過命令列傳送的引數的開頭提供引數 update
。如果答案是肯定的,則呼叫 update()
函式。
install
條件檢查 c
變數是否在其開頭包含 install
引數,如果包含,則通過比較 args
的長度來確定它是否應該有兩個引數變數為 2。
因此,我們通過命令列驗證引數列表裡面給它的引數。
如果 args
的長度為 2,它會呼叫 install()
函式,並將 args[1]
作為引數。
只要其他情況都不匹配,就會執行 else
情況,此時它將在螢幕上列印出 Invalid Command
。
static void update() {
Console.WriteLine("updating your system");
}
當 update
作為引數傳送時,update()
函式會列印 "Updating your system"
。
static void install(string message) {
Console.WriteLine($"installing the program {message}");
}
當 install
作為引數傳送時,install()
函式會列印 "Installing the program {message}"
。
完整原始碼:
using System;
class CommandLineParser {
static void Main(string[] args) {
if ((args.Length == 0)) {
Console.WriteLine("arguments not correct");
return;
}
var c = args[0];
if (c == "update") {
update();
} else if (c == "install") {
if (args.Length == 2)
install(args[1]);
} else {
Console.WriteLine("Invalid Command");
}
}
static void update() {
Console.WriteLine("updating your system");
}
static void install(string message) {
Console.WriteLine($"installing the program {message}");
}
}
I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.
LinkedIn