Anarkin

ConsoleArguments

Feb 2nd, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.75 KB | None | 0 0
  1. using System.Collections.Generic;
  2.  
  3. namespace w3x.Common
  4. {
  5.     /// <summary>
  6.     /// Example input:
  7.     ///   app.exe -port 1234 -enableSomething -mode elevated silent somethingElse
  8.     /// Interpreted as:
  9.     ///   { port : { 0 : "1234" } },
  10.     ///   { enableSomething },
  11.     ///   { mode : { 0 : elevated, 1 : silent, 2 : somethingElse } }
  12.     /// </summary>
  13.     public class ConsoleArguments : IArguments
  14.     {
  15.         public static class Arg
  16.         {
  17.             public const string Port = "port";
  18.         }
  19.  
  20.         private IDictionary<string, IList<string>> _internal;
  21.         private readonly ILogger _logger;
  22.  
  23.         public ConsoleArguments(ILogger logger)
  24.         {
  25.             _logger = logger;
  26.         }
  27.  
  28.         #region IArguments
  29.         public void Set(IEnumerable<string> args)
  30.         {
  31.             ProcessArguments(args);
  32.         }
  33.  
  34.         public IList<string> Get(string name)
  35.         {
  36.             _logger.Debug(string.Format("Argument '{0}' accessed", name));
  37.            
  38.             return _internal[name];
  39.         }
  40.         #endregion
  41.  
  42.         private void ProcessArguments(IEnumerable<string> args)
  43.         {
  44.             _logger.Debug("Processing the arguments");
  45.            
  46.             _internal = new Dictionary<string, IList<string>>();
  47.            
  48.             var lastArg = string.Empty;
  49.  
  50.             foreach (var arg in args)
  51.             {
  52.                 if (!arg.StartsWith("-"))
  53.                 {
  54.                     if (!string.IsNullOrEmpty(lastArg))
  55.                         _internal[lastArg].Add(arg);
  56.  
  57.                     continue;
  58.                 }
  59.  
  60.                 lastArg = arg.Substring(1);
  61.                 _internal.Add(lastArg, new List<string>());
  62.             }
  63.         }
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment