/// <summary>
        /// ヘルプで表示するテキストを取得します。
        /// </summary>
        /// <returns></returns>
        public string GetHelpText()
        {
            StringBuilder builder = new StringBuilder();

            builder.AppendLine("Paramater");
            foreach (var flag in this._flagSet)
            {
                builder.Append("  ");
                if (this._parameterFlagDictionary.ContainsKey(flag))
                {
                    _MemberObj <ParameterFlagAugmentAttribute> memberObj = this._parameterFlagDictionary[flag];
                    builder.AppendLine($"-{flag}:{memberObj.Attribute.ParameterMessage}  {memberObj.Attribute.HelpMessage}");
                }
                else
                {
                    _MemberObj <FlagAugmentAttribute> memberObj = this._flagDictionary[flag];
                    builder.AppendLine($"-{flag}  {memberObj.Attribute.HelpMessage}");
                }
            }
            return(builder.ToString());
        }
        /// <summary>
        /// 引数オブジェクトを生成します。
        /// </summary>
        /// <param name="args">プログラム引数</param>
        /// <param name="customConstructorArgs">引数オブジェクトのコンストラクタのstring配列以降の引数</param>
        /// <returns>生成された引数オブジェクト</returns>
        public T GeneratArgumentObject(string[] args, params object[] customConstructorArgs)
        {
            List <string> arguments = new List <string>();

            List <IP_ReflectFunc> reflectFuncs = new List <IP_ReflectFunc>();

            for (int i = 0; i < args.Length; i++)
            {
                var str = args[i];
                if (str[0] == '-')
                {
                    string flag = str.Substring(1);
                    if (!this._flagSet.Contains(flag))
                    {
                        throw new Exception($"フラグが不正です。 {str}");
                    }

                    if (this._flagDictionary.ContainsKey(flag))
                    {
                        //通常フラグの場合
                        _MemberObj <FlagAugmentAttribute> memberObj = this._flagDictionary[flag];
                        MemberInfo memberInfo = memberObj.Member;
                        switch (memberInfo.MemberType)
                        {
                        case MemberTypes.Field: {
                            reflectFuncs.Add(new _FieldReflect((FieldInfo)memberInfo));
                            break;
                        }

                        case MemberTypes.Method: {
                            reflectFuncs.Add(new _MethodReflect((MethodInfo)memberInfo));
                            break;
                        }

                        case MemberTypes.Property: {
                            PropertyInfo propertyInfo = (PropertyInfo)memberInfo;
                            reflectFuncs.Add(new _PropertyReflect(propertyInfo, _propertysFieldDictionary.GetValue(propertyInfo)));
                            break;
                        }
                        }
                    }
                    else
                    {
                        //パラメータ付きフラグの場合
                        _MemberObj <ParameterFlagAugmentAttribute> memberObj = this._parameterFlagDictionary[flag];
                        i++;
                        string     parameter  = args[i];
                        MemberInfo memberInfo = memberObj.Member;
                        switch (memberInfo.MemberType)
                        {
                        case MemberTypes.Field: {
                            reflectFuncs.Add(new _PFieldReflect((FieldInfo)memberInfo, parameter));
                            break;
                        }

                        case MemberTypes.Method: {
                            reflectFuncs.Add(new _PMethodReflect((MethodInfo)memberInfo, parameter));
                            break;
                        }

                        case MemberTypes.Property: {
                            PropertyInfo propertyInfo = (PropertyInfo)memberInfo;
                            reflectFuncs.Add(new _PPropertyReflect(propertyInfo, _propertysFieldDictionary.GetValue(propertyInfo), parameter));
                            break;
                        }
                        }
                    }
                    continue;
                }
                arguments.Add(str);
            }
            IEnumerable <object> invokeArgs = new object[] { arguments.ToArray() }.Concat(customConstructorArgs);
            T tObj = (T)Activator.CreateInstance(this._argumentsObjectType, invokeArgs.ToArray());

            reflectFuncs.ForEach(reflectFunc => reflectFunc.Reflect(tObj));
            return(tObj);
        }