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

如何让System.CommandLine命令行实现大小写不敏感解析?

实现System.CommandLine大小写不敏感解析的方案

由于官方关于可选大小写不敏感解析的议题(#133)尚未解决,目前可以通过以下两种方式实现需求:

1. 自定义符号映射器(通用方案)

通过继承DefaultSymbolMapper并重写映射逻辑,让解析器忽略大小写匹配命令、选项和参数:

using System.CommandLine;
using System.CommandLine.Parsing;

public class CaseInsensitiveSymbolMapper : DefaultSymbolMapper
{
    public override Symbol? Map(Token token, ParseResult parseResult)
    {
        var lowerToken = token.Value.ToLowerInvariant();
        foreach (var symbol in parseResult.CurrentSymbols)
        {
            if (symbol is IIdentifierSymbol identifier && 
                identifier.Name.ToLowerInvariant() == lowerToken)
            {
                return symbol;
            }
        }
        return base.Map(token, parseResult);
    }
}

使用时,在创建解析器时指定自定义映射器:

var rootCommand = new RootCommand("示例命令行工具");
// 添加你的命令、选项、参数
var verboseOption = new Option<bool>("--verbose", "启用详细日志");
rootCommand.AddOption(verboseOption);

var parser = new Parser(config =>
{
    config.SymbolMapper = new CaseInsensitiveSymbolMapper();
});

await parser.InvokeAsync(args);

这种方案会对所有命令行符号生效,无需逐个配置。

2. 手动添加别名(局部方案)

如果只需要针对特定选项/命令支持大小写不敏感,可以为目标符号添加所有大小写变体作为别名:

var verboseOption = new Option<bool>("--verbose", "启用详细日志")
{
    Aliases = { "--VERBOSE", "--Verbose", "--vErBoSe" }
};
rootCommand.AddOption(verboseOption);

此方法适合少量符号的场景,但需要手动维护所有可能的大小写组合,扩展性较差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:11:02