IRONSOFTWAREHOME

10 分钟内掌握 C# 应用程序中的命令行参数

10 分钟或更短时间内掌握 C# 应用程序中的命令行参数

Tim Corey

8 分 46 秒

在构建现代 C# 应用程序时,开发人员往往需要灵活掌握程序的启动和行为方式。 您可以让用户在启动应用程序时传递命令行参数,从而使应用程序充满活力,而不是对每个选项进行硬编码。 这使开发人员和用户都能直接通过命令行提供输入参数,在不更改代码的情况下调整应用程序的运行方式。

在题为"C# 应用程序中的命令行参数 10 分钟或更少"的简明 10 分钟教程中,Tim Corey 清楚地演示了如何启用命令行参数并在控制台应用程序和 Windows 窗体应用程序中有效地处理它们。 本文将按照 Tim 的解释逐步介绍相关概念。

什么是命令行参数?

一开始,蒂姆解释了为什么命令行参数很重要。 他将这些工具与我们启动 Docker 等工具的方式进行了比较,在 Docker 中,我们可以指定加载什么图像或执行什么任务等命令。 同样,在 C# 命令行应用程序中,您可以传递参数来定义程序在运行时的行为。

例如,如果您要运行一个控制台应用程序来处理文件,您可能希望通过命令行输入来指定文件路径或模式,而不是修改代码。

设置控制台项目

Tim 在 Visual Studio 中从一个基本的 .NET 8 控制台应用程序项目开始。 默认代码仅打印类似 "按回车键退出 "的信息,并使用 Console.ReadLine() 语句在关闭前等待用户输入。

现在,为了处理命令行输入,Tim 引入了 args 数组,该数组用于存储执行时传递给应用程序的参数。 尽管现代 C# 控制台应用程序使用顶级语句,但在幕后,它们仍然有一个定义为的入口点:

static void Main(string[] args)

或有时:

static int Main(string[] args)

这些签名代表主方法--执行开始的入口点。 args参数是一个字符串数组(string[]),包含从命令行提供的所有参数。

Tim 演示了使用 foreach 循环迭代 args 数组:

foreach (var arg in args)
{
    Console.WriteLine(arg);
}

在这里,var arg 代表 args 数组中的每个字符串参数,程序会将它们显示在控制台输出的不同行中。

Tim 指出,虽然顶层语句隐藏了诸如 Program 类和 Main 方法之类的模板代码,但一切工作原理都是一样的--args 数组始终可用,并可随时捕获命令行参数。

运行控制台应用程序

接下来,Tim 将展示如何测试该功能。 由于没有提供命令行输入,在 Visual Studio 中正常运行程序不会显示任何不同的内容。

为了正确测试,他手动修改了执行过程:打开文件资源管理器,导航到项目的 bin → 调试 → net8.0 文件夹,然后从该路径启动终端窗口。

在此基础上,他使用了以下命令:

ConsoleArgs.exe "hello world" -t timing

该命令演示了几个关键点:

  • 带引号的 "hello world "被视为一个字符串参数,而不是两个独立的单词。

  • 标记 -t 和单词 timing 被视为两个附加参数。

执行时,控制台输出显示

hello world  
-t  
timing

每行参数代表 args 数组中的一个元素。 Tim 解释说,这证实了命令行参数的正确用法--控制台应用程序成功接收并显示了执行过程中传递的所有参数。

他提到开发者在从项目目录运行时也可以使用.NET run而不是可执行路径:

dotnet run -- "hello world" -t timing

双破折号 (--) 会告诉 .NET 将其后的所有内容视为您的程序的 ** 命令行参数**,而不是 .NET CLI 本身的 ** 命令行参数**。

处理和解析命令行参数

现在我们可以读取参数了,Tim 将讨论如何智能地处理命令行参数。

例如,如果 -t 是一个期望值标志,程序必须知道将下一个字符串参数作为其值。 Tim 演示了可以通过检查 args 数组中的索引来手动解析:

for (int i = 0; i < args.Length; i++)
{
    if (args[i] == "-t")
    {
        var value = args[i + 1];
        Console.WriteLine($"Timing parameter: {value}");
    }
}

这种方法可以让您处理命名参数、数字类型,甚至是冗长模式标志。 Tim 指出,开发人员经常使用 switch 语句甚至外部文档和库来进行更高级的参数解析,但 System 命名空间和 args 数组已经提供了基本情况下所需的一切。

扩展到 Windows 窗体应用程序

在演示了控制台应用程序后,Tim 开始演示 Windows 窗体应用程序(WinForms)。

在生成的代码中,Program.cs 文件包含一个静态 void Main() 方法,但它还不接受参数。 为了启用命令行参数,Tim 手动修改了 Main 方法,使其包含 args 参数:

[STAThread]
static void Main(string[] args)
{
    ApplicationConfiguration.Initialize();
    Application.Run(new Form1(args.FirstOrDefault() ?? "default"));
}

他解释说,args.FirstOrDefault() 会从 args 数组中检索第一个输入参数(如果没有提供参数,则返回 "默认")。

然后,在 Form1 类中,Tim 更新了构造函数,使其接受一个字符串参数:

public Form1(string name)
{
    InitializeComponent();
    displayName.Text = name;
}

在这里,displayName 是 Windows 窗体设计器中定义的标签,它现在显示的是通过命令行传递的参数。

当他不带参数运行程序时,标签显示 "默认"。当他使用

WinFormsArgs.exe "Hello World"

表单窗口显示 "Hello World"。

Tim 解释说,这项技术可以让 Windows 窗体应用程序像控制台应用程序一样支持命令行参数,从而让用户能够动态更改启动行为。

命令行参数的实际用途(7:18)

最后,Tim 讨论了命令行工具如何利用这一功能实现多功能。 开发人员可以使用命令行参数来

  • 在不同模式下启动应用程序(例如,暗模式亮模式)。

  • 在启动时提供文件路径或配置选项。

  • 使用 -v 或 --debug 等简单的开关启用冗长模式或调试功能。

  • 为不同的工作流程创建传递特定参数的快捷方式。

通过设计接受字符串参数的主方法,您可以轻松扩展应用程序的灵活性和适应性,而无需额外的用户输入对话框或配置文件。

结论(8:15)

他以实例为导向的解释表明,在 C# 中处理命令行参数并不复杂--只需理解每个应用程序都有一个入口点(Main),从命令行传递过来的参数会以字符串数组的形式到达该入口点。

无论您使用的是控制台应用程序还是 Windows 窗体应用程序,这一概念都能让您的程序对启动时指定的命令、值和参数做出动态响应。

最终收获

Tim Corey 的视频为 C# 中命令行参数的正确用法提供了清晰实用的指南。 通过了解 Main 方法中 args 参数的工作原理,开发人员可以轻松创建、解析和使用参数,从而开发出更强大、可配置的应用程序。

因此,下一次当您创建 C# 项目时,请记住您的命令行参数不仅仅是技术语法,它们还是您的程序与用户之间的桥梁,让您的代码更强大、更灵活、更实际可用。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户