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

如何在System.CommandLine中创建互斥的--ipAddresses与--ipAddressesCsv选项?

实现System.CommandLine互斥选项(二选一)

完全可以通过System.CommandLine实现这种互斥且必选其一的选项逻辑,核心是使用OptionGroup对两个选项进行分组配置。

修改后的代码示例

// 定义IP地址列表选项
var ipAddressesOption = new Option<IEnumerable<IPAddress>>("--ipAddresses")
{
    Description = "直接传入一个或多个IP地址",
    Arity = ArgumentArity.OneOrMore,
    AllowMultipleArgumentsPerToken = true,
    // 移除IsRequired=true,由OptionGroup统一控制必填逻辑
};

// 定义CSV文件选项
var ipAddressesCsvOption = new Option<FileInfo?>("--ipAddressesCsv")
{
    Description = "传入包含IP地址的CSV文件路径",
    Arity = ArgumentArity.ZeroOrOne,
    AllowMultipleArgumentsPerToken = false,
    // 同样移除IsRequired=true
};

// 创建互斥选项组,设置组为必填
var ipSourceGroup = new OptionGroup(new[] { ipAddressesOption, ipAddressesCsvOption })
{
    IsRequired = true,
    Description = "选择IP地址的输入方式:直接传入IP列表或指定CSV文件"
};

// 将选项和组添加到根命令
var rootCommand = new RootCommand();
rootCommand.AddOption(ipAddressesOption);
rootCommand.AddOption(ipAddressesCsvOption);
rootCommand.AddOptionGroup(ipSourceGroup);

关键说明

  • 移除单个选项的IsRequired:原代码中两个选项都设置IsRequired=true会强制用户同时提供两个选项,不符合互斥需求,因此必须去掉该配置。
  • OptionGroup的作用:该组件会自动保证组内选项不能同时使用,同时设置IsRequired=true可确保用户必须从组中选择一个选项。
  • 自动验证:当用户既不提供--ipAddresses也不提供--ipAddressesCsv,或同时提供两个时,System.CommandLine会自动返回错误提示,无需手动编写额外验证逻辑。

内容的提问来源于stack exchange,提问作者Node.JS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:32:38