public void TestCollectionConverterElementType() { Assert.AreEqual(typeof(int), CollectionConverter.GetElementType(typeof(int[]))); Assert.AreEqual(typeof(int), CollectionConverter.GetElementType(typeof(List <int>))); Assert.AreEqual(typeof(int?), CollectionConverter.GetElementType(typeof(List <int?>))); Assert.AreEqual(typeof(string), CollectionConverter.GetElementType(typeof(ArrayList))); }
public void TestEmptyCollection(Type expectedType) { var converter = new CollectionConverter(); var result = converter.ConvertFromString("", CULTURE, expectedType); Assert.AreEqual(expectedType, result.GetType()); Assert.IsNotNull(result); Assert.AreEqual(0, ((IList)result).Count); }
public void TestCollectionWithElementConversion(Type expectedType) { var converter = new CollectionConverter(" ", new NumberConverter()); var result = converter.ConvertFromString("1 2 3 4 5", CULTURE, expectedType); Assert.AreEqual(expectedType, result.GetType()); var arr = (IList)result; Assert.AreEqual(5, arr.Count); Assert.AreEqual(1, arr[0]); Assert.AreEqual(3, arr[2]); Assert.AreEqual(5, arr[4]); }
public void TestCollectionConversion(Type expectedType, string separator) { var converter = new CollectionConverter(separator); var result = converter.ConvertFromString(string.Join(separator, new[] { "1", "2", "3", "4", "5" }), CULTURE, expectedType); Assert.AreEqual(expectedType, result.GetType()); var arr = (IList)result; Assert.AreEqual(5, arr.Count); Assert.AreEqual("1", arr[0]); Assert.AreEqual("3", arr[2]); Assert.AreEqual("5", arr[4]); }
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); }