如何在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
相关产品推荐
相关产品推荐

