如何用NuGet的CommandLineParser限制命令行开关值为指定词汇
CommandLineParser 配置Option值限制的方法
当然可以直接在Options类中配置mode的允许值限制,无需手动校验,推荐两种简洁的实现方式:
方法一:使用枚举类型(推荐)
因为你的mode只有固定的三个可选值,直接把ImportMode的类型定义为枚举,CommandLineParser会自动校验输入值是否合法,不符合要求时会直接返回解析错误。
步骤1:定义枚举
public enum ImportMode { clm, generic, students }
步骤2:修改Options类
public class Options { [Option("mode", Required = true, HelpText = "指定导入模式,可选值:clm、generic、students")] public ImportMode ImportMode { get; set; } }
当用户输入的mode不在枚举范围内时,解析器会自动提示错误,无需手动编写校验逻辑。
方法二:自定义验证属性
如果不想用枚举(比如需要支持动态配置允许值),可以自定义验证属性标记在Option上,让解析器自动执行校验。
步骤1:自定义验证属性
using System.ComponentModel.DataAnnotations; using System.Collections.Generic; public class AllowedImportModeAttribute : ValidationAttribute { private readonly HashSet<string> _allowedModes = new HashSet<string> { "clm", "generic", "students" }; protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var inputMode = value as string; if (inputMode == null || !_allowedModes.Contains(inputMode)) { return new ValidationResult($"mode参数只能是以下值之一:{string.Join(", ", _allowedModes)}"); } return ValidationResult.Success; } }
步骤2:标记到Options属性
public class Options { [Option("mode", Required = true, HelpText = "指定导入模式,可选值:clm、generic、students")] [AllowedImportMode] public string ImportMode { get; set; } }
步骤3:启用验证解析
解析时需要调用带验证的方法:
var result = Parser.Default.ParseArguments<Options>(args) .WithParsedAndValidate(options => { // 处理合法参数逻辑 });
如果输入值不符合要求,解析器会触发验证错误并提示自定义的错误信息。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

