You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:15:03