C# 如何创建具有多个值的选项开关?

C# 如何创建具有多个值的选项开关?,c#,parsing,C#,Parsing,我使用了option属性,它从命令行获取值并将其传递给Options类的对象。 考虑是否通过:-J 23 然后将23设置为JournalId属性。但是我想在我的代码中进行更改,如果我通过:-j 23 2016 5作为值 然后必须将23分配给JournalId,2016分配给Year,5分配给IssueId。 那么,我必须在代码中进行哪些更改才能使之成为可能 class Options { [Option('j',"journalid", Required = true, H

我使用了option属性,它从命令行获取值并将其传递给Options类的对象。 考虑是否通过:-J 23 然后将23设置为JournalId属性。但是我想在我的代码中进行更改,如果我通过:-j 23 2016 5作为值 然后必须将23分配给JournalId,2016分配给Year,5分配给IssueId。 那么,我必须在代码中进行哪些更改才能使之成为可能

class Options
{

    [Option('j',"journalid", Required = true,
      HelpText = "journal Id.")]
    public int JournalId { get; set; }


    [Option("year", DefaultValue = 0,
      HelpText = "Publication year")]
    public int Year { get; set; }

    [Option("issueId", DefaultValue = 0,
      HelpText = "Publication IssueId")]
    public int IssueId { get; set; }

    [ParserState]
    public IParserState LastParserState { get; set; }

    [HelpOption('h')]
    public string GetUsage() 
    {
        return HelpText.AutoBuild(this,
          (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
    }
}

// Consume them
static void Main(string[] args)
{
    var options = new Options();


    if (CommandLine.Parser.Default.ParseArguments(args, options))
    {
        // Values are available here
        if (true) Console.WriteLine("JournalId: {0} {1} {2}", options.JournalId,options.Year,options.IssueId);
    }

    Console.ReadKey();
}

在如何初始化选项对象方面,您似乎需要一些灵活性。通过使用属性对其进行初始化,可以约束您修改选项类本身,以更改其初始化方式。代替使用属性,您可能需要考虑使用经典的一个,例如工厂。p> 例如,您的工厂类将接受命令行参数并解析它们。它将有一个公共方法来构造一个Options对象,并根据命令行解析的结果对其进行初始化


当您需要修改命令行的解析方式时,您可以修改factory类,或者使用相同的接口编写一个新的factory类。

在如何初始化Options对象方面,您似乎需要一些灵活性。通过使用属性对其进行初始化,可以约束您修改选项类本身,以更改其初始化方式。代替使用属性,您可能需要考虑使用经典的一个,例如工厂。p> 例如,您的工厂类将接受命令行参数并解析它们。它将有一个公共方法来构造一个Options对象,并根据命令行解析的结果对其进行初始化

当需要修改命令行的解析方式时,可以修改factory类,也可以使用相同的接口编写新的factory类