protected virtual void WriteParameter(TextWriter writer, IEnumerable<ParameterSet> sets, Parameter parameter) { writer.Write('-'); writer.Write(parameter.Name); writer.Write(' '); if (parameter.Type == typeof(Switch)) { writer.WriteLine("[<" + typeof(Switch).Name + ">]"); } else { writer.Write('<'); writer.Write(parameter.Type.Name); writer.Write('>'); writer.WriteLine(); } writer.WriteLine(); writer.Write(" "); writer.WriteLine(parameter.HelpMessage()); writer.WriteLine(); writer.WriteLine(" {0,-25}{1}", "Required?", parameter.GetAttribute<RequiredAttribute>() != null); writer.WriteLine(" {0,-25}{1}", "Position?", parameter.Position.HasValue ? parameter.Position.Value.ToString() : "named"); string defValue; var defValueAttr = parameter.GetAttribute<DefaultValueAttribute>(); if (defValueAttr == null) defValue = "None"; else defValue = defValueAttr.Value.ToString(); writer.WriteLine(" {0,-25}{1}", "Default value", defValue); writer.WriteLine(" {0,-25}{1}", "Parameter sets", string.Join(", ", sets.Where(s => s.Contains(parameter)).Select(s => s.Name))); }