commandlineparser / commandlineparser/commandline

DashDash (--) doesn't work properly with multi-value options

未關閉
#605 4 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
C#
星號
4.8k
分支
478
PR 合併指標
30 天內沒有已合併 PR

描述

When using the "DashDash" feature, the results are unexpected when using a multi-valued option.

## Single-valued option (base case)
`Program.cs`
```C#
class Program
{
#region Main

static int Main(string[] args)
{
return new Parser(with => with.EnableDashDash = true)
.ParseArguments(args)
.MapResult(options => RunWrappedExecutable(options),
_ => -2);
}

#endregion
}
```

`CommandLineOptions.cs`
```C#
class CommandLineOptions
{
#region Properties

[Option('o', "option")]
public string Option { get; set; }

[Value(0)]
public IEnumerable Values { get; set; }

#endregion
}
```

Running the program as follows:
```
foo.exe -o "option" -- value1 value2 value3
```

produces the (expected) results:
```
options.Option = "option"
options.Values = [ "value1", "value2", "value3" ]
```

## Multi-valued option (broken case)
`CommandLineOptions.cs`
```C#
class CommandLineOptions
{
#region Properties

[Option('o', "option")]
public IEnumerable Option { get; set; }

[Value(0)]
public IEnumerable Values { get; set; }

#endregion
}
```

Running the program as follows:
```
foo.exe -o "option" -- value1 value2 value3
```

produces the (unexpected) results:
```
options.Option = [ "option", "value1", "value2", "value3" ]
options.Values = [ ]
```

## Conclusion
My expectation is that any arguments after the `--` would be processed as values, rather than options. Can you confirm my expectations match yours? If so, I'm happy to try to resolve this issue and submit a PR. Thanks!

貢獻指南

這個儲存庫沒有索引到貢獻指南

研究方向

使用 CommandLineOptions.cs 中的多值選項,並啟用 EnableDashDash,重現 Program.cs 中顯示的命令。追蹤處理 -- 分隔符號的 parser 進入點,並比較單值和 IEnumerable 兩種情況。完成的標準是:-- 之後的引數填入 Values,而該選項僅保留其前面的值,並有一個涵蓋此範例的回歸測試。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
csharp
領域
cli
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
38/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。