internal static CommandLineArgument Create(ParameterInfo parameter)
        {
            var ret = PropertyInitializer.CreateInstance <CommandLineArgument>();

            ret.Position     = parameter.Position;
            ret.ArgumentType = parameter.ParameterType;
            ret.Source       = parameter;
            ret.DefaultValue = parameter.HasAttr <DefaultValueAttribute>() ? parameter.Attr <DefaultValueAttribute>().Value : null;

            ret.IgnoreCase = true;

            if (parameter.Member.DeclaringType.HasAttr <ArgIgnoreCase>() && parameter.Member.DeclaringType.Attr <ArgIgnoreCase>().IgnoreCase == false)
            {
                ret.IgnoreCase = false;
            }

            if (parameter.HasAttr <ArgIgnoreCase>() && parameter.Attr <ArgIgnoreCase>().IgnoreCase == false)
            {
                ret.IgnoreCase = false;
            }

            ret.Aliases.Add(parameter.Name);

            ret.Metadata.AddRange(parameter.Attrs <IArgMetadata>().AssertAreAllInstanceOf <ICommandLineArgumentMetadata>());

            return(ret);
        }