命令行解析器库在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个有关如何使用该库的教程中看到了相同的示例代码。 (例如,请参见Parsing Command Line Arguments with Command Line Parser Library

inuyasha2010 回答:命令行解析器库在C#中给出“ System.Type”错误

(此答案是在该库的v2.7编写的)

their repository's 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# Example显示,您可以将方法传入WithParsed来处理选项,而无需执行Main中的所有操作。

本文链接:https://www.f2er.com/3157310.html

大家都在问