国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

寫個C#命令行參數(shù)解析的小工具

2019-11-14 13:36:33
字體:
供稿:網(wǎng)友

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

參數(shù)實體:

 1 public class CommandLineArgument 2 { 3     List<CommandLineArgument> _arguments; 4  5     int _index; 6  7     string _argumentText; 8  9     public CommandLineArgument Next10     {11         get {12             if (_index < _arguments.Count - 1) {13                 return _arguments[_index + 1];14             }15 16             return null;17         }18     }19     public CommandLineArgument PRevious20     {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 }

 

參數(shù)解析器:

 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函數(shù)里對args做相應的解析和操作了。

 

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

Example.exe -u MrJson -p admin123

 

在Example的Main函數(shù)里處理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 }

 

如果參數(shù)后面要傳多個值,例如下面這個例子,-chpwd參數(shù)需要兩個參數(shù):

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.

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西宁市| 邳州市| 宜昌市| 呼图壁县| 兰考县| 库车县| 驻马店市| 南京市| 固原市| 桂平市| 嘉善县| 延寿县| 和田市| 宝山区| 三门峡市| 铜川市| 揭东县| 怀化市| 游戏| 铁岭市| 家居| 宜川县| 龙山县| 阿荣旗| 鸡泽县| 古浪县| 湖州市| 保康县| 叶城县| 磴口县| 德兴市| 宁强县| 宜兰市| 南投市| 清镇市| 兴国县| 辉南县| 社旗县| 平昌县| 襄垣县| 台南市|