写个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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述