У меня есть класс с double
и double?
, и я хочу округлить эти значения в процессе сопоставления.
Я создал небольшой пример кода, чтобы проиллюстрировать проблему, с которой я сталкиваюсь:
Когда я использую AddTransform<double?>
, преобразование работает для double?
, но ничего не делает для double
. Когда я добавляю AddTransform<double>
, преобразование работает, пока все обнуляемые поля имеют значение. Когда оба преобразователя добавлены и по крайней мере одно поле равно нулю, я вижу следующую ошибку:
AutoMapper.AutoMapperMappingException
Inner Exception 1:
InvalidOperationException: Nullable object must have a value.
Error mapping types.
Mapping types:
TestSource -> TestDestination
AutoMapperValueTransformer.TestSource -> AutoMapperValueTransformer.TestDestination
Type Map configuration:
TestSource -> TestDestination
AutoMapperValueTransformer.TestSource -> AutoMapperValueTransformer.TestDestination
Destination Member:
Prop3
Здесь код для воспроизведения вопроса
using System;
using AutoMapper;
namespace AutoMapperValueTransformer
{
internal static class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg =>
cfg.CreateMap<TestSource, TestDestination>()
.AddTransform<double?>(t => t.HasValue ? Math.Round(t.Value, 3) : t)
//.AddTransform<double>(t => Math.Round(t, 3))
);
var mapper = config.CreateMapper();
var src = new TestSource()
{
Prop1 = 3.3454353,
Prop2 = 3.3454353,
Prop3 = null,
};
var dst = mapper.Map<TestSource, TestDestination>(src);
Console.WriteLine(dst.Prop1);
Console.WriteLine(dst.Prop2);
Console.WriteLine(dst.Prop3);
}
}
internal class TestSource
{
public double Prop1 { get; set; }
public double? Prop2 { get; set; }
public double? Prop3 { get; set; }
}
internal class TestDestination
{
public double Prop1 { get; set; }
public double? Prop2 { get; set; }
public double? Prop3 { get; set; }
}
}