2017-12-04 22 views
0

2 개의 IEnumerables 객체를 캐스팅해야하는데,이를 Obj1 및 Obj2라고합시다.2 개의 IEnumerable 자동 매스터 캐스팅을 사용하여 기본값 제공

config = new MapperConfiguration(cfg => { 
      cfg.CreateMap<IEnumerable<Obj1>, IEnumerable<Obj2>>(); 
     }); 

     mapper = config.CreateMapper(); 

하지만 난이 obj2보다 목록의 모든 요소에 기본 값을주고 싶어하기 때문에 나는 문제가있다 :

내가 이렇게 직접 두 목록을 캐스팅 automapper를 사용하여이 작업을 수행하려면 . IEnumerable 캐스트를 유지하는 방법이 있나요?.

config = new MapperConfiguration(cfg => { 
     cfg.CreateMap<Obj1, Obj2>(); 
    }); 

    mapper = config.CreateMapper(); 

그리고이 다음에 :

내가 생각하고있는 유일한 해결책은 다음과 같이 obj2보다를 입력 OBJ1 목록 및 주조의 모든 요소 사이를 반복 한 다음 요소 자체에 대한 매퍼를 생성하는 것입니다 Obj1의 목록에있는 foreach 요소를 캐스팅하고 Obj2 유형의 목록에 추가하십시오.

매퍼 구성에서 직접이 작업을 수행하고 싶습니다. IEnumerable 매핑을 유지하면서 작업을 수행 할 수 있습니까?

감사합니다.

답변

1

기본 개체에 대한 맵이있는 경우이 개체의 컬렉션에 대한 맵이 필요하지 않습니다. 대신 Map<TDestination>()에 전화 할 때 대상 유형을 설정하십시오. AutoMapper Docs: Lists and Arrays을 참조하십시오.

config = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Obj1, Obj2>() 
     .ForMember(dest => dest.ShouldBeDefaulted, 
        o => o.MapFrom(src => src.ShouldBeDefaulted == null 
         ? TheDefaultValue : src.ShouldBeDefaulted)); 
}); 

var source = new List<Obj1>() { new Obj1("A"), new Obj1("B")}; 

// tell AutoMapper that the destination should be a collection during call to Map() 
Obj2[] dest = mapper.Map<Obj2[]>(source); 
Assert.AreEqual(2, dest.Length);