/// <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); }