internal static CommandOption Create(PropertyInfo propertyInfo, CommandMetadata commandMetadata, IEnumerable<IConverter> converters)
        {
            Guard.NotNull(propertyInfo, nameof(propertyInfo));
            Guard.NotNull(commandMetadata, nameof(commandMetadata));
            Guard.NotNull(converters, nameof(converters));

            if (propertyInfo.ShouldBeIgnored())
            {
                return null;
            }
            if (!propertyInfo.IsValidOptionProperty())
            {
                throw new CommandLineParserException(
                    Constants.ExceptionMessages.ParserExtractMetadataPropertyShouldBeWritableOrICollection(
                        propertyInfo.Name, commandMetadata.Name));
            }
            var commandOption = new CommandOption(propertyInfo, commandMetadata, converters);
            return commandOption;
        }
 internal static string GetMultiValueIndicator(CommandOption commandOption)
 {
     if (commandOption.PropertyOption.PropertyType.IsCollectionType())
     {
         return CollectionIndicator;
     }
     if (commandOption.PropertyOption.PropertyType.IsDictionaryType())
     {
         return DictionaryIndicator;
     }
     return string.Empty;
 }