You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为C#控制台应用实现含可选参数的自定义命令行参数

C#控制台应用实现命名参数解析并序列化JSON

直接用微软官方的System.CommandLine库就能搞定,不用手动解析args,还能轻松处理必填参数、任意组合的命名参数,步骤如下:

1. 安装依赖

在NuGet包管理器中安装两个包:

  • System.CommandLine:负责命令行参数解析
  • System.Text.Json:负责JSON序列化

2. 定义参数模型类

创建一个类映射所有命令行参数,其中Name设为必填,其他参数可选:

public class AppConfig
{
    public string Name { get; set; } = string.Empty;
    public string? Model { get; set; }
    public string? State { get; set; }
    public string? Version { get; set; }
    public int? Number { get; set; }
    // 补充剩下的5个参数,按需定义类型(string、int等)
}

3. 配置命令行参数并处理逻辑

在Program.cs中编写核心逻辑,配置命令行选项、绑定参数到模型,最后序列化JSON:

using System.CommandLine;
using System.Text.Json;

// 定义根命令
var rootCommand = new RootCommand("控制台应用参数解析并生成JSON文件");

// 配置各个命令行选项
var nameOption = new Option<string>("--name", "应用名称(必填)")
{
    IsRequired = true // 设置为必填
};
var modelOption = new Option<string?>("--model", "型号");
var stateOption = new Option<string?>("--state", "状态");
var versionOption = new Option<string?>("--version", "版本");
var numberOption = new Option<int?>("--number", "编号");
// 补充剩下的5个参数选项,格式类似上面

// 将选项添加到根命令
rootCommand.AddOption(nameOption);
rootCommand.AddOption(modelOption);
rootCommand.AddOption(stateOption);
rootCommand.AddOption(versionOption);
rootCommand.AddOption(numberOption);
// 添加剩余选项

// 设置命令处理逻辑
rootCommand.SetHandler(
    (name, model, state, version, number) =>
    {
        // 绑定参数到模型
        var config = new AppConfig
        {
            Name = name,
            Model = model,
            State = state,
            Version = version,
            Number = number
            // 赋值剩余参数
        };

        // 序列化为JSON并写入文件
        var json = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
        File.WriteAllText("appConfig.json", json);
        Console.WriteLine("JSON文件已生成:appConfig.json");
    },
    nameOption, modelOption, stateOption, versionOption, numberOption
    // 传入剩余选项
);

// 运行命令行解析
await rootCommand.InvokeAsync(args);

4. 测试使用

编译后,你可以用任意参数组合运行程序:

  • 仅传必填项:myApp.exe --name "MyTestApp"
  • 传多个参数:myApp.exe --name "MyTestApp" --model "ProMax" --version "2.1" --number 100
  • 任意顺序传参:myApp.exe --state "Active" --name "MyTestApp" --model "Mini"

程序会自动校验必填的--name参数,如果没传会直接报错提示,无需自己写校验逻辑。

内容的提问来源于stack exchange,提问作者Bianca Trasca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:03:28