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

System.CommandLine Argument类使用疑问:为何无法传递参数值?

对System.CommandLine中Argument类的误解分析

你在使用System.CommandLine的Argument类时,核心误解混淆了**Argument(位置参数)与Option(命名选项)**的本质区别:

核心区别说明

  • Argument是位置参数:不需要--/-这类前缀标识,命令行中直接按顺序传递对应值,它的name参数只是代码里的逻辑标识,不是命令行里的调用前缀。
  • Option是命名选项:必须通过--/-前缀来指定,然后跟随对应的值,这也是你替换成Option后程序正常运行的原因。

错误原因

你给Argument的name设为--input是错误用法,当你用--input "Hello World"调用程序时,System.CommandLine会将--input识别为未知的命令/参数,同时Hello World也无法匹配到正确的位置参数,因此抛出Unrecognized command or argument 'Hello World'.错误。

正确使用Argument的示例代码

using System.CommandLine;

// Argument的name为逻辑名称,无需带--前缀
var inputArgument = new Argument<string>(
  name: "input", 
  description: "input any value and print it out");

var rootCommand = new RootCommand();
rootCommand.AddArgument(inputArgument);
rootCommand.SetHandler((inputArgumentValue) =>
{
  Console.WriteLine($"{inputArgumentValue}");
}, inputArgument);

rootCommand.Invoke(args);

正确调用方式

直接传递值即可,不需要前缀:

your-app-name "Hello World"

如果必须使用--input这类带前缀的调用形式,只能选择Option类;若要保留Argument的特性,就必须遵循位置参数的使用规则,直接按顺序传递值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:12:37