How can I obtain the named arguments from a console application in the form of a Dictionary?

前端 未结 4 763
走了就别回头了
走了就别回头了 2021-02-05 05:18

I have a console application called MyTool.exe

What is the simplest way to collect the named arguments passed to this console applicaiton and then to put them in a

相关标签:
4条回答
  • 2021-02-05 06:00

    I don't see why this code is bad? hova?

            var arguments = new Dictionary<string, string>();
            foreach (var item in Environment.GetCommandLineArgs())
            {
                try
                {
                    var parts = item.Split('=');
                    arguments.Add(parts[0], parts[1]);
                }
                catch (Exception ex)
                {
                    // your error handling here....
                }
    
    0 讨论(0)
  • 2021-02-05 06:01

    Here's how this can be done in the most simple way:

        static void Main(string[] args)
        {
            var arguments = new Dictionary<string, string>();
    
            foreach (string argument in args)
            {
                string[] splitted = argument.Split('=');
    
                if (splitted.Length == 2)
                {
                    arguments[splitted[0]] = splitted[1];
                }
            }
        }
    

    Note that:

    • Argument names are case sensitive
    • Providing the same argument name more than once does not produce an error
    • No spaces are allowed
    • One = sign must be used
    0 讨论(0)
  • 2021-02-05 06:15

    if you have a "=" in your parameter values, a safer option would be:

    private static Dictionary<string, string> ResolveArguments(string[] args)
    {
        if (args == null)
            return null;
    
        if (args.Length > 1)
        {
            var arguments = new Dictionary<string, string>();
            foreach (string argument in args)
            {
                int idx = argument.IndexOf('=');
                if (idx > 0)
                    arguments[argument.Substring(0, idx)] = argument.Substring(idx+1);
            }
            return arguments;
        }
    
        return null;
    }
    
    0 讨论(0)
  • 2021-02-05 06:16

    Use this Nuget package

    • V1.9.x - Command Line Parser Library (CodePlex - Going away soon and out of date)
    • V2+ - Command Line Parser (Ongoing support)

    Takes seconds to configure and adds instant professional touch to your application.

    // Define a class to receive parsed values
    class Options {
      [Option('r', "read", Required = true,
        HelpText = "Input file to be processed.")]
      public string InputFile { get; set; }
    
      [Option('v', "verbose", DefaultValue = true,
        HelpText = "Prints all messages to standard output.")]
      public bool Verbose { get; set; }
    
      [ParserState]
      public IParserState LastParserState { get; set; }
    
      [HelpOption]
      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 (options.Verbose) Console.WriteLine("Filename: {0}", options.InputFile);
      }
    }
    
    0 讨论(0)
提交回复
热议问题