public CommandArgument(
     Type parameterType, ParameterKind parameterKind, PropertyInfo property, string?description,
     TypeConverterAttribute?converter, DefaultValueAttribute?defaultValue,
     CommandArgumentAttribute argument, IEnumerable <ParameterValidationAttribute> validators)
     : base(parameterType, parameterKind, property, description, converter, defaultValue,
            null, validators, argument.IsRequired)
 {
     Value    = argument.ValueName;
     Position = argument.Position;
 }
        private static CommandArgument BuildArgumentParameter(PropertyInfo property, CommandArgumentAttribute attribute)
        {
            var description  = property.GetCustomAttribute <DescriptionAttribute>();
            var converter    = property.GetCustomAttribute <TypeConverterAttribute>();
            var defaultValue = property.GetCustomAttribute <DefaultValueAttribute>();
            var validators   = property.GetCustomAttributes <ParameterValidationAttribute>(true);

            var kind = GetParameterKind(property.PropertyType);

            return(new CommandArgument(
                       property.PropertyType, kind, property,
                       description?.Description, converter,
                       defaultValue, attribute, validators));
        }