Я использую AutoMapper 6.0.2 как часть объединения частично заполненных объектов с существующими полностью заполненными объектами, где нулевые значения частично заполненных объектов игнорируются. Мое использование настраиваемого распознавателя значений для игнорирования нулевых значений работает, но оно не работает, как я ожидаю, когда я пытаюсь настроить его так же, чтобы игнорировать списки нулевой длины.
Вот упрощенный код:
public class cTest
{
public List<double> dList { get; set; }
}
public class ValueResolver : IMemberValueResolver<object, object, object, object>
{
public object Resolve(object source, object destination, object sourceMember, object destinationMember, ResolutionContext context)
{
var collection = sourceMember as System.Collections.ICollection;
if (collection != null && collection.Count == 0)
{
return destinationMember;
}
return sourceMember ?? destinationMember;
}
}
[TestFixture]
public class MergeTests
{
[Test]
public void MergeTest()
{
var newObj = new cTest { dList = new List<double>() };
var existingObj = new cTest { dList = new List<double> { 1, 2, 3 } };
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<cTest, cTest>();
cfg.ForAllPropertyMaps(pm => true, (pm, c) => c.ResolveUsing(new ValueResolver(), pm.SourceMember.Name));
});
config.AssertConfigurationIsValid();
var m = config.CreateMapper();
var testResult = m.Map(newObj, existingObj);
Assert.AreEqual(new List<double>() { 1, 2, 3 }, testResult.dList);
}
}
Когда я прохожу через него, вводится строка return destinationMember;
- поэтому я не уверен, почему testResult.dList
приводит к пустому списку (значению newObj), а не к значению назначения (существующего объекта).
Может кто-нибудь помочь объяснить, что мне не хватает?
Приветствия