.NET 6.0 C#“新控制台模板”-如何读取 CLI 参数?

djt*_*cex 95 c# command-line-interface .net-6.0 visual-studio-2022

现在 .NET 6.0 已经发布,默认 CLI 项目模板的彻底更新似乎是缺少熟悉的样板文件,被简化为以下内容:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
Run Code Online (Sandbox Code Playgroud)

尚不清楚(到目前为止我一直在尝试查找文档,但无济于事)是如何访问传递给可执行文件的入口点类的命令行参数?

Cod*_*odo 123

您可以使用Environment类从代码中的任何位置访问命令行参数。

特别是,您可以使用Environment.GetCommandLineArgs

string name = Environment.GetCommandLineArgs()[1];
Console.WriteLine($"Hello, {name}!");
Run Code Online (Sandbox Code Playgroud)

请注意,数组中的第一个元素包含可执行文件的路径,传递给程序的参数从第二个元素开始,即索引 1。

  • 我正在检查,这也有效: Console.WriteLine($"Hello, World! {args[1]}"); (13认同)
  • @Peres 是的,这就是 *Guru Stron* 的答案 (2认同)

Gur*_*ron 76

新项目模板正在使用称为顶级语句的C# 9 功能。

对于顶级语句文件,编译器将生成string[] args参数(实际上它生成包含方法的整个类Main),因此您可以直接使用它(如之前所做的那样Main(string[] args)):

Console.WriteLine(args.Length);
Console.WriteLine(args.FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)

有关生成模式的更多信息可以在顶级语句功能规范中找到。另请参阅顶级语句 - 没有 Main 方法的程序文档。

  • @djtubig-malicex 我在我的机器上编译了它,在 shraplab.io (答案中的链接之一),这里是 [dotnetfiddle](https://dotnetfiddle.net/9kbG56)。 (6认同)
  • 为什么这感觉*Pythonic*? (4认同)
  • 由于未定义“args”,因此无法编译。 (2认同)