【问题标题】:Get the actual option name in Mono.Options在 Mono.Options 中获取实际的选项名称
【发布时间】:2016-03-22 18:22:42
【问题描述】:
我正在使用Mono.Options 来解析 CLI 应用程序中的命令行标志。
为方便起见,许多选项都有多个别名,例如"o|opt|option"。此外,Mono.Options 允许使用不同的前缀指定选项,例如-o,/opt 或 --option.
是否有合理的方法来检索在解析期间/之后为选项提供的实际名称?在我的情况下,这将是 "-o"、"/opt" 或 "--option",具体取决于用户在命令行中提供的内容。
【问题讨论】:
标签:
c#
mono
command-line-arguments
options
【解决方案1】:
我没有通过Mono.Options'公共接口找到任何合理的方法来做到这一点。最好的结果是在解析时将实际选项名称传递给Action 回调,但它不存在。
Mono.Options'选项原型解析机制也是非公开的。
我最终手动解析原型并在命令行参数中搜索任何选项别名以及所有可能的选项前缀(-、-- 和 /):
public static string GetProvidedName(string flagPrototype, IEnumerable<string> commandLineArguments)
{
IEnumerable<string> flagNames = flagPrototype
.Split('|')
.Select(value => value.Replace("=", string.Empty).Replace(":", string.Empty))
.SelectMany(flagName =>
new string[]
{
$"-{flagName}",
$"--{flagName}",
$"/{flagName}"
});
return commandLineArguments.First(argument => flagNames.Contains(argument));
}
我希望它对希望解决相同问题的人有用。