public IConverter GetConverter(Type type) { if (!TimeSpanConverter.CanConvertTo(type)) { throw new InvalidOperationException(string.Format("{0} can convert strings only to TimeSpan type", typeof(TimeSpanConverter).Name)); } return(new TimeSpanConverter(format)); }
/// <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); }