程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 寫個C#命令行參數解析的小工具,

寫個C#命令行參數解析的小工具,

編輯:C#入門知識

寫個C#命令行參數解析的小工具,


最近測試工作做的比較多因此時常要創建一些控制台類型的應用程序。因為程序有不同的參數開關,需要在程序啟動的時候通過命令行來給程序傳遞各種開關和參數。直接操作args有些不方便,所以就寫了個解析參數的小工具來處理各種參數。

參數實體:

 1 public class CommandLineArgument
 2 {
 3     List<CommandLineArgument> _arguments;
 4 
 5     int _index;
 6 
 7     string _argumentText;
 8 
 9     public CommandLineArgument Next
10     {
11         get {
12             if (_index < _arguments.Count - 1) {
13                 return _arguments[_index + 1];
14             }
15 
16             return null;
17         }
18     }
19     public CommandLineArgument Previous
20     {
21         get {
22             if (_index > 0)
23             {
24                 return _arguments[_index - 1];
25             }
26 
27             return null;
28         }
29     }
30     internal CommandLineArgument(List<CommandLineArgument> args, int index, string argument)
31     {
32         _arguments = args;
33         _index = index;
34         _argumentText = argument;
35     }
36 
37     public CommandLineArgument Take() {
38         return Next;
39     }
40 
41     public IEnumerable<CommandLineArgument> Take(int count)
42     {
43         var list = new List<CommandLineArgument>();
44         var parent = this;
45         for (int i = 0; i < count; i++)
46         {
47             var next = parent.Next;
48             if (next == null)
49                 break;
50 
51             list.Add(next);
52 
53             parent = next;
54         }
55 
56         return list;
57     }
58 
59     public static implicit operator string(CommandLineArgument argument)
60     {
61         return argument._argumentText;
62     }
63 
64     public override string ToString()
65     {
66         return _argumentText;
67     }
68 }

 

參數解析器:

 1 public class CommandLineArgumentParser
 2 {
 3 
 4     List<CommandLineArgument> _arguments;
 5     public static CommandLineArgumentParser Parse(string[] args) {
 6         return new CommandLineArgumentParser(args);
 7     }
 8 
 9     public CommandLineArgumentParser(string[] args)
10     {
11         _arguments = new List<CommandLineArgument>();
12 
13         for (int i = 0; i < args.Length; i++)
14         {
15             _arguments.Add(new CommandLineArgument(_arguments,i,args[i]));
16         }
17 
18     }
19 
20     public CommandLineArgument Get(string argumentName)
21     {
22         return _arguments.FirstOrDefault(p => p == argumentName);
23     }
24 
25     public bool Has(string argumentName) {
26         return _arguments.Count(p=>p==argumentName)>0;
27     }
28 }

 

在項目中引入這兩個類就可以在Main函數裡對args做相應的解析和操作了。

 

例如有控制台應用Example,在命令行中輸入:

Example.exe -u MrJson -p admin123

 

在Example的Main函數裡處理args:

 1 static void Main(string[] args)
 2 {
 3     var arguments = CommandLineArgumentParser.Parse(args);
 4 
 5     if (arguments.Has("-u"))
 6     {
 7         Console.WriteLine("用戶名:{0}", arguments.Get("-u").Next);
 8     }
 9 
10     if (arguments.Has("-p"))
11     {
12         Console.WriteLine("密碼:{0}", arguments.Get("-p").Next);
13     }
14 }

 

如果參數後面要傳多個值,例如下面這個例子,-chpwd參數需要兩個參數:

Example.exe -chpwd admin888 admin999

 

那麼,就可以這樣處理:

 1 if(arguments.Has("-chpwd"))
 2 {
 3     var arg = arguments.Get("-chpwd");
 4     var oldPwd = arg.Take();
 5     var newPwd = arg.Take().Take();
 6     // 或者
 7     var pwds = arg.Take(2);
 8     oldPwd = pwds.First();
 9     newPwd = pwds.Last();
10 
11     Console.WriteLine("原密碼:{0} 新密碼:{1}", oldPwd, newPwd);  
12 }

 

That's all.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved