C#控制台exe实现命名参数启动功能的示例代码如何获取?
C# 控制台程序命名参数实现示例
以下是两种不需要引入第三方依赖的实现方案,可直接适配/参数名 参数值的调用格式。
方案1:轻量基础版(适合简单参数场景)
直接解析启动参数存为键值对,无额外依赖:
using System; using System.Collections.Generic; namespace Testing { class Program { static void Main(string[] args) { Dictionary<string, string> paramDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); for (int i = 0; i < args.Length; i++) { // 匹配/开头的命名参数 if (args[i].StartsWith("/") && i + 1 < args.Length) { string paramName = args[i].TrimStart('/'); string paramValue = args[i + 1]; paramDict[paramName] = paramValue; // 跳过已读取的参数值 i++; } } // 读取参数示例 if (paramDict.TryGetValue("a", out string valA)) { Console.WriteLine($"参数a的取值:{valA}"); } if (paramDict.TryGetValue("b", out string valB)) { Console.WriteLine($"参数b的取值:{valB}"); } } } }
编译后直接运行testing.exe /a input1 /b input2即可正常读取参数。
方案2:增强功能版(支持必填校验、默认值)
如果需要更完善的参数校验能力,可以扩展如下逻辑:
using System; using System.Collections.Generic; using System.Linq; namespace Testing { class Program { static void Main(string[] args) { Dictionary<string, string> paramDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); // 定义必填参数列表 List<string> requiredParams = new List<string> { "a" }; // 定义可选参数的默认值 Dictionary<string, string> defaultParams = new Dictionary<string, string> { {"b", "默认值B"} }; // 解析参数逻辑和基础版一致 for (int i = 0; i < args.Length; i++) { if (args[i].StartsWith("/") && i + 1 < args.Length) { string paramName = args[i].TrimStart('/'); string paramValue = args[i + 1]; paramDict[paramName] = paramValue; i++; } } // 校验必填参数 List<string> missingParams = requiredParams.Where(p => !paramDict.ContainsKey(p)).ToList(); if (missingParams.Any()) { Console.WriteLine($"缺少必填参数:{string.Join("、", missingParams)}"); Console.WriteLine("调用格式示例:testing.exe /a 输入值1 /b 输入值2"); return; } // 填充默认值 foreach (var kv in defaultParams) { if (!paramDict.ContainsKey(kv.Key)) { paramDict[kv.Key] = kv.Value; } } // 后续直接从paramDict读取参数即可 } } }
注意事项
- 如果参数值包含空格,调用时用英文双引号包裹参数值即可,比如
testing.exe /a "带空格的参数值" /b input2,不需要修改解析逻辑 - 初始化字典时传入的
StringComparer.OrdinalIgnoreCase会自动忽略参数名大小写,/A和/a会被识别为同一个参数
内容的提问来源于stack exchange,提问作者mytabi
相关产品推荐
相关产品推荐

