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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:42:36