c# - 命令行解析器库在 C# 中给出“System.Type”错误
问题描述
我正在用 C# 编写控制台应用程序(.NET Framework)。我想使用命令行中的参数,并且我正在尝试使用命令行解析器库来帮助我做到这一点。
这是 Nuget 上的包 - https://www.nuget.org/packages/CommandLineParser/
我从这个 StackOverflow 问题中发现了这一点 - Best way to parse command line arguments in C#?
MWE
using System;
using CommandLine;
namespace CLPtest
{
class Program
{
class SomeOptions
{
[Option('n', "name")]
public string Name { get; set; }
}
static void Main(string[] args)
{
var options = new SomeOptions();
CommandLine.Parser.Default.ParseArguments(args, options);
}
}
}
options
当我尝试创建一个最小的工作示例时,我在这一行得到一个错误:
CommandLine.Parser.Default.ParseArguments(args, options);
错误是Argument 2: cannot convert from 'CLPtest.Program.SomeOptions' to 'System.Type'
我真的很困惑,因为我在至少 3 个关于如何使用这个库的教程中看到了相同的示例代码。(例如 -使用命令行解析器库解析命令行参数)
解决方案
(这个答案是在这个库的 v2.7 时写的)
从他们的存储库的 README中可以看出,这似乎是 README 中前面提到的 API 更改的一部分。与您引用的示例代码相比,现在似乎对参数的处理方式有所不同。所以,现在你应该在里面做这样的事情Main
:
...
static void Main(string[] args)
{
CommandLine.Parser.Default.ParseArguments<SomeOptions>(args);
}
...
要对这些选项进行实际操作,您可以使用这些选项,其中包含您的类WithParsed
中定义的选项。SomeOptions
...
static void Main(string[] args)
{
CommandLine.Parser.Default.ParseArguments<SomeOptions>(args).WithParsed(option =>
{
// Do something with your parsed arguments in here...
Console.WriteLine(option.Name); // This is the property from your SomeOptions class.
});
}
...
自述文件后面的C# 示例表明,您可以传入一个方法WithParsed
来处理您的选项,而不是在Main
.
推荐阅读
- javascript - postMessage 跨域通信示例
- numpy - 是否有矢量化方法可以通过矩阵和行有条件地访问 Numpy 张量中的元素?
- php - Laravel 为多对多关系附加模型会产生未定义的变量错误
- ios - Xcode 10.1 (iOS SDK 12.1) 中的 MSAL 构建错误
- django - “CELERY_BEAT_SCHEDULER”配置在 django 设置中不起作用
- sabre - 从 Sabre 查询通用产品属性
- mathematical-optimization - 如何计算不同数量的决策变量 - 线性规划
- python - Leetcode #377 组合总和 IV,我的代码中的意外行为
- python - Plotly 或 Bokeh Offline - 根据搜索框更新图表
- python - 将 else 条件添加到简化结构块