Beispiel #1
0
        public static void HandleStringArguments(String[] args)
        {
            if (args.Length == 0)
            {
                ShowUsage();
                return;
            }
            ConcurrentDictionary <String, String> argDict = ArgumentUtils.Parse(args);

            // [lyne] Console.WriteLine() 可能会一闪而过, 用  MessageBox.Show() 就可以停留. 注意, CLI 程序应移除 System.Windows.Forms.dll 引用.
            // Console.WriteLine(argDict.Keys.ToString());

            /*
             * [lyne]
             * 以程序的逻辑 (功能职责) 来设计代码利于优化, 以人的逻辑 (关注点) 来设计代码不利优化, 何况人的思维方式总是不一样的.
             * 比如此处, 从人思维角度设计:
             *  人关心的是传的参数个数. 所以先判断是否传了一个参数, 再判断这个参数是不是符合格式的 "path=<路径>", 怎么判断? ArgumentUtils.Parse(String[]) 解析不到 "path=<路径>".
             *  略过 n 个步骤, 确实繁琐.
             *
             * 而已代码逻辑角度设计:
             *  方案一:
             *  ArgumentUtils.Parse(String[]) 只负责解析符合格式的参数, 不管多少个参数, 只要没有解析到 "path=<路径>".
             *  就当做只传一个参数处理, 若此时传入多个直接报错.
             *
             *  方案二:
             *  因为最终的参数解析功能依赖于 HandleDictionaryArguments(), 所以处理生成 HandleDictionaryArguments() 的参数
             *
             *
             */



            /*
             * 没有 传入符合格式 "参数名=参数值" 的参数时, {argDict} = null.
             * 如直接把文件拖到 CLI 程序上, 此时没有使用 path 参数, 仅有一个纯路径, 则将其作为 path 参数
             *
             * 传入符合格式 "参数名=参数值" 的参数时, {argDict} 不为空, 但可能没有传入 path 参数.
             */
            // 没有解析到 "path=<路径>", 则只能出现一个参数
            if (argDict == null || !argDict.ContainsKey("path"))
            {
                if (args.Length == 1)
                {
                    if (argDict == null)
                    {
                        argDict = new ConcurrentDictionary <string, string>();
                    }
                    argDict.TryAdd("path", args[0]);
                }
                // 如有 2+ 个参数, 则必须包含 path 参数, 否则直接报错
                else
                {
                    Console.WriteLine("[ERROR] Wrong arguments.");
                    ShowUsage();
                    return;
                }
            }

            HandleDictionaryArguments(argDict);
        }