跳至页脚内容
Iron Academy Logo
C# 应用程序
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 void Main(string[] args)

或有时:

static int Main(string[] args)
static int Main(string[] args)

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

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

foreach (var arg in args)
{
    Console.WriteLine(arg);
}
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
ConsoleArgs.exe "hello world" -t timing

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

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

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

执行时,控制台输出显示

hello world  
-t  
timing
hello world  
-t  
timing

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

他提到,开发人员还可以在从项目目录运行时使用 dotnet run 代替可执行路径:

dotnet run -- "hello world" -t timing
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}");
    }
}
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"));
}
[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;
}
public Form1(string name)
{
    InitializeComponent();
    displayName.Text = name;
}

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

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

WinFormsArgs.exe "Hello World"
WinFormsArgs.exe "Hello World"

表单窗口显示 "Hello World"。

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

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

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

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

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

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

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

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

结论(8:15)

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

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

最终收获

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

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

Hero Worlddot related to 10 分钟内掌握 C# 应用程序中的命令行参数
Hero Affiliate related to 10 分钟内掌握 C# 应用程序中的命令行参数

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我