在本文中,我们展示了如何在C#中使用命令行参数。
命令行参数是通常通过终端传递给控制台程序的值。
我们可以通过声明一个string[]
类型的参数来将命令行参数发送到Main
方法。使用顶级语句的程序有一个默认的内置args
变量,其中包含参数。
Main中的C#cmd参数
在第一个示例中,我们将命令行参数传递给Main
方法。
class Program { static void Main(string[] args) { foreach (var arg in args) { Console.WriteLine(arg); } } }
在程序中,我们只是将所有参数打印到控制台。
static void Main(string[] args)
命令行参数具有string[]
类型。将变量命名为args
是一种惯例。
$ dotnet run John Doe gardener John Doe gardener
没有Main的C#cmdargs
如果没有Main
方法,参数可以通过args
内置变量访问。
Console.WriteLine($"You have passed {args.Length} arguments"); foreach (var arg in args) { Console.WriteLine(arg); }
程序打印命令行参数的数量并将它们打印到终端。
$ dotnet run 1 2 3 4 5 6 You have passed 6 arguments 1 2 3 4 5 6
C#环境.GetCommandLineArgs
Environment.GetCommandLineArgs
返回一个字符串数组,其中包含当前进程的命令行参数。
string[] cargs = Environment.GetCommandLineArgs(); Console.WriteLine($"You have passed {cargs.Length} arguments"); foreach (var arg in cargs) { Console.WriteLine(arg); }
它比默认的内置args
变量更明确。此外,Environment.GetCommandLineArgs
将程序名称计为参数之一。
$ dotnet run 1 2 3 4 5 You have passed 6 arguments /home/jano/Documents/prog/csharp/cmd-args/SimpleEx/bin/Debug/net6.0/SimpleEx.dll 1 2 3 4 5
C#环境.命令行
Environment.CommanLine
返回包含命令线性参数的字符串。
string cargs = Environment.CommandLine; Console.WriteLine(cargs); string[] vals = cargs.Split(" "); try { int sum = vals.Skip(1).Select(e => Convert.ToInt32(e)).Sum(); Console.WriteLine($"The sum of values is {sum}"); return 0; } catch (FormatException e) { Console.WriteLine("Invalid input"); Console.WriteLine(e.Message); return 1; }
程序需要一个整数列表作为输入。
string cargs = Environment.CommandLine;
我们使用Environment.CommandLine
获取命令行输入。
string[] vals = cargs.Split(" ");
我们将字符串分成几部分。
int sum = vals.Skip(1).Select(e => Convert.ToInt32(e)).Sum();
我们跳过第一个参数,即程序名称。我们将字符串转换为整数并计算总和。
catch (FormatException e) {
解析命令行参数很容易出错。我们可以获得FormatExceptions
。
C#命令行解析器
命令行解析器库提供了一个简洁明了的API,用于操作命令行参数。
$ dotnet add package CommandLineParser
我们添加了CommandLineParser
包。
namespace CommandLineArgs; using CommandLine; class Options { [Option("vals")] public IEnumerable<int>? Vals { get; set; } } class Program { static void Main(string[] args) { Parser.Default.ParseArguments<Options>(args).WithParsed<Options>(o => { if (o.Vals != null) { int sum = o.Vals.Sum(); Console.WriteLine($"The sum is {sum}"); } else { Console.WriteLine("No arguments"); } }); } }
程序定义了一个--vals
选项,它接受一个整数序列。
$ dotnet run --vals 1 2 3 4 5 6 The sum is 21
在本文中,我们使用了C#中的命令行参数。
列出所有C#教程。