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

使用CommandLine库解析C#控制台应用命令行参数报错如何解决

错误原因

  • CommandLineParser库的ParseArguments方法要求泛型参数必须为可实例化的具体类,你传入ICommandLineOption接口作为解析目标,库无法实例化接口,因此抛出找不到有效构造函数的异常。
  • 多Verb场景的官方规范要求,必须将所有标记了[Verb]特性的具体命令类都作为泛型参数传入ParseArguments,而非传入它们的公共接口。

修复方案

你可以直接调整解析逻辑,按具体命令类型匹配处理逻辑,不需要额外的类型判断、转换,也可以删除冗余的ICommandLineOption接口和WhichOption属性,修改后的完整代码如下:

[Verb("symbol", HelpText = "Symbol to test")]
public class SymbolCommand
{
    [Option('s', "symbol", Required = true, HelpText = "Symbol To run backtest")]
    public string Symbol { get; set; }
}

[Verb("begin", HelpText = "Start date of test")]
public class BeginDateCommand
{
    [Option('d', "date", Required = true, HelpText = "Date to begin run of backtest")]
    public System.DateTime BeginDate { get; set; }
}

static void Main(string[] args)
{
    Parser.Default.ParseArguments<SymbolCommand, BeginDateCommand>(args)
        .WithParsed<SymbolCommand>(comm =>
        {
            Console.WriteLine(comm.Symbol);
        })
        .WithParsed<BeginDateCommand>(comm =>
        {
            Console.WriteLine(comm.BeginDate);
        });
}

修改后可直接通过命令行调用:

  • 执行Symbol命令:你的程序名.exe symbol -s AAPL
  • 执行日期命令:你的程序名.exe begin -d 2024-01-01

如果你需要保留ICommandLineOption接口做其他通用逻辑处理,只需要修改ParseArguments的泛型参数为两个具体类即可,原有接口和属性无需改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:42:02