public IConverter GetConverter(Type type)
 {
     if (!CollectionConverter.CanConvertFrom(type))
     {
         throw new InvalidOperationException(string.Format("{0} can convert only collections that implements IList", typeof(CollectionConverter).Name));
     }
     if (ElementConverterType == null)
     {
         return(new CollectionConverter(elementSeparator, Converters.GetConverterForType(CollectionConverter.GetElementType(type), ElementFormatString)));
     }
     if (!typeof(IConverter).IsAssignableFrom(ElementConverterType))
     {
         throw new InvalidOperationException(string.Format("'{0}' is not valid converter type (does not implement {1})", ElementConverterType.Name, typeof(IConverter).Name));
     }
     return(CreateConverter());
 }
 /// <summary>
 /// Возвращает один из предустановленных конвертеров для преобразования значений типа <paramref name="type"/> из строк.
 /// </summary>
 /// <param name="type">Тип значения для преобразования.</param>
 /// <param name="format">Используемый формат преобразования. Если не задан, используется формат по умолчанию.</param>
 public static IConverter GetConverterForType(Type type, string format = "")
 {
     type = Nullable.GetUnderlyingType(type) ?? type;
     if (BooleanConverter.CanConvertTo(type))
     {
         return(new BooleanConverter());
     }
     if (TransparentConverter.CanConvertTo(type))
     {
         return(TransparentConverter.Instance);
     }
     if (NumberConverter.CanConvertTo(type))
     {
         return(new NumberConverter());
     }
     if (DecimalConverter.CanConvertTo(type))
     {
         return(new DecimalConverter());
     }
     if (TimeSpanConverter.CanConvertTo(type))
     {
         return(new TimeSpanConverter(format));
     }
     if (DateTimeConverter.CanConvertTo(type))
     {
         return(new DateTimeConverter(format));
     }
     if (EnumConverter.CanConvertTo(type))
     {
         return(new EnumConverter());
     }
     if (CollectionConverter.CanConvertFrom(type))
     {
         return(new CollectionConverter(GetConverterForType(CollectionConverter.GetElementType(type), format)));
     }
     throw new InvalidOperationException("failed to find suitable converter for type " + type);
 }