Попытался я тут использовать MappingSchema в отрыве от Linq2db. И слегка обломался.
Мне думалось, что если я зову MappingSchema.SetConverter для какой-то пары типов, то потом я смогу его использовать через Converter.ChangeType(obj, type, mappingSchema) или хотя бы через MappingSchema.ChangeType. Но, облом. Вместо моего конвертера упорно вызывается дефолтовый.
Это так и задумывалось?
var li =
ConvertInfo.Default.Get ( value.GetType(), to) ?? // видимо срабатывает вот это
ConvertInfo.Default.Create(mappingSchema, value.GetType(), to); // а сюда не доходит
В общем, пришлось пока свои велосипеды изобретать, подглядывая в твой код.
Здравствуйте, IT, Вы писали:
IT>А можешь тестик накидать. Посмотрю в чём там дело.
[Test]
public void TestCustomConverter()
{
var ms = new MappingSchema();
ms.SetConverter((string s) => s.IsNullOrEmpty() ? default(int?) : int.Parse(s));
Assert.That(ms.ChangeType("", typeof(int?)), Is.EqualTo(null));
}
На выходе:
System.FormatException : Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at lambda_method(Closure , Object )
at LinqToDB.Common.Converter.ChangeType(Object value, Type conversionType, MappingSchema mappingSchema) in i:\linq2db\Source\Common\Converter.cs:line 129
Проблема именно при использовании MappingSchema из Linq2db. Для Codejam'овской работает правильно.