commandlineparser / commandlineparser/commandline

Use separate options for enum values

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

描述

Having support for `enum` flags is great! But sometimes you don't want the user to use the actual enum values. In fact, they could easily be re-factored causing breaking changes for existing command line integrations.

It would be nice if you could specify names which would then be used instead of the enum values. E.g. using the [DisplayAttribute](https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.displayattribute?view=net-6.0).

```c#
[Flags]
public enum MyEnum
{
None = 0,
[Display(Name = "a")]
VeryLongEnumValueNameHere = 1,
[Display(Name = "b")]
EvenLongerEnumValueNameHereWithNoRiskForTypos = 2,
[Display(Name = "c")]
WouldBeNiceWithShorterName = 4
}
```

The corresponding command line could look like this: `foo.exe --my-enum-value a|b|c`

Or even better...

**Allow OptionAttribute on enum values?**
We could allow the `OptionAttribute` on enum values and get separate arguments for each enum flag:
`foo.exe -a -b -c`

```c#
[Flags]
public enum MyEnum
{
None = 0,
[Option('a', "long-value", HelpText = "Long value")]
VeryLongEnumValueNameHere = 1,
[Option('b', "even-longer-value", HelpText = "Even longer value")]
EvenLongerEnumValueNameHereWithNoRiskForTypos = 2,
[Option('c', "nice", HelpText = "Would be nice")]
WouldBeNiceWithShorterName = 4
}
```

Feasible?

貢獻指南

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

研究方向

先追蹤 enum flags 的解析方式,以及 OptionAttribute 中繼資料的處理方式。比較提議的 DisplayAttribute 名稱與允許在 enum 值上使用 OptionAttribute 的做法,然後判斷哪種方法符合現有的 command-line 行為。完成的條件是已達成共識、實作並記錄一種受支援的 design,且涵蓋範例中的 flag 值。

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

評估

技術堆疊
csharp
領域
cli
Issue 類型
功能
難度
5/5
預估耗時
一週以上
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

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

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