static bool TryGetConvertibleValue(object value, Type destinationType, out ConvertibleValue convertibleValue) { // Parameter name "noCustomTypeDesc" is correct but documentation is wrong (see http://msdn.microsoft.com/en-us/library/vstudio/y7wd3zkh%28v=vs.90%29.aspx) var sourceTypeConverter = TypeDescriptor.GetConverter(value, noCustomTypeDesc: false); if (sourceTypeConverter != null && sourceTypeConverter.CanConvertTo(destinationType)) { convertibleValue = new ConvertibleValueFromSourceType(value, destinationType, sourceTypeConverter); } else { var destinationTypeConverter = TypeDescriptor.GetConverter(destinationType); if (destinationTypeConverter.CanConvertFrom(value.GetType())) { convertibleValue = new ConvertibleValueFromDestinationType(value, destinationTypeConverter); } else { convertibleValue = null; } } return(convertibleValue != null); }
public void ReadRow_AutoMappedIConvertible_Success() { using (var importer = Helpers.GetImporter("Strings.xlsx")) { ExcelSheet sheet = importer.ReadSheet(); sheet.ReadHeading(); // Valid value ConvertibleValue row1 = sheet.ReadRow <ConvertibleValue>(); Assert.Equal("value", row1.Value); // Valid value ConvertibleValue row2 = sheet.ReadRow <ConvertibleValue>(); Assert.Equal(" value ", row2.Value); // Empty value ConvertibleValue row3 = sheet.ReadRow <ConvertibleValue>(); Assert.Null(row3.Value); } }
public void ReadRow_CustomMappedIConvertible_Success() { using (var importer = Helpers.GetImporter("Strings.xlsx")) { importer.Configuration.RegisterClassMap <ConvertibleValueFallbackMap>(); ExcelSheet sheet = importer.ReadSheet(); sheet.ReadHeading(); // Valid value ConvertibleValue row1 = sheet.ReadRow <ConvertibleValue>(); Assert.Equal("value", row1.Value); // Valid value ConvertibleValue row2 = sheet.ReadRow <ConvertibleValue>(); Assert.Equal(" value ", row2.Value); // Empty value ConvertibleValue row3 = sheet.ReadRow <ConvertibleValue>(); Assert.Equal("empty", row3.Value); } }
public void IntIsConvertibleToString() { var value = new ConvertibleValue<int>(20); Assert.AreEqual("20", value.ConvertTo<string>()); }
public void DoubleIsConvertibleToInt() { var value = new ConvertibleValue<double>(1.38); Assert.AreEqual(1, value.ConvertTo<int>()); }
public void DecimalIsConvertibleToString() { var value = new ConvertibleValue<decimal>(20); Assert.AreEqual("20", value.ConvertTo<string>()); }