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

使用CommandLineParser时,如何访问Parsed<T>的Value属性?

如何访问CommandLineParser解析结果的Value属性

嘿,我太懂你遇到的这个困惑了!CommandLineParser里的ParserResult<Options>其实是个区分联合类型,它包含两种可能的状态:解析成功的Parsed<Options>,以及解析失败的NotParsed<Options>。Value属性是Parsed<Options>这个子类特有的成员,所以直接在ParserResult<Options>实例上是看不到它的,你得先判断当前结果的类型,再提取对应的值。

推荐方法:用C#模式匹配直接判断

这是最直观简洁的方式,直接检查结果是不是成功解析的类型:

ParserResult<Options> parserResult = Parser.Default.ParseArguments<Options>(args);

if (parserResult is Parsed<Options> parsedSuccess)
{
    // 解析成功啦,直接拿Value里的Options实例
    Options myOptions = parsedSuccess.Value;
    Console.WriteLine(myOptions.YourOptionProperty); // 换成你自己定义的选项属性就行
}
else if (parserResult is NotParsed<Options> parsedFail)
{
    // 解析失败的话,可以在这里处理错误,比如打印错误信息或者帮助文档
    foreach (var error in parsedFail.Errors)
    {
        Console.WriteLine(error.ToString());
    }
}

更优雅的方式:用扩展方法处理

CommandLineParser还提供了现成的扩展方法,帮你省去手动类型判断的步骤,代码会更简洁:

Parser.Default.ParseArguments<Options>(args)
    .WithParsed(options =>
    {
        // 解析成功时直接拿到Options实例,直接用就行
        Console.WriteLine(options.YourOptionProperty);
    })
    .WithNotParsed(errors =>
    {
        // 解析失败时处理错误
        foreach (var error in errors)
        {
            Console.WriteLine(error.ToString());
        }
    });

为啥一开始看不到Value属性?

简单说,ParserResult<T>是个抽象基类,它本身并没有Value属性——这个属性是只有解析成功的Parsed<T>子类才有的。所以你得先确认当前结果是成功状态,才能访问到Value哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:59:54