2011-02-15 5 views
2

원본 개체에 대한 공용 메서드를 사용하여 대상 개체의 목록을 원본에 매핑해야합니다.대상을 채우는 연산을 사용하는 AutoMapper

public class Destination 
{ 
    private IList<int> List = new List<int>(); 
    public void Add(int i) { List.Add(i); } 
} 

public class Source 
{ 
    public int[] List { get; set; } 
} 

그래서 의사 의사 언어로 매핑해야합니다 : Source.List에서 Mapper.CreateMap의 foreach는 항목,

가이 작업을 수행 할 수 Source.Add (항목)를 호출?

답변

5

예.

Mapper.CreateMap<Source, Destination>() 
    .ConvertUsing(s => 
        { 
         var d = new Destination(); 
         foreach(var i in s.List) 
         { 
          d.Add(i); 
         } 
         return d; 
        }); 
+0

우수, 고마워! – jaspernygaard

0

나는 그렇게 생각하지 않는다.

AutoMapper 사용자 지정 형식 변환기는 원본 만 받아 들여 대상을 반환합니다.

하지만 int []에서 Destination으로의 암시 적 유형 변환을 구현하지 않는 이유는 무엇입니까? http://www.csharphelp.com/2006/10/type-conversion-and-conversion-operators-in-c/

+0

그것은 때문이 아니라 형식 convertion의,하지만 예, 암시 적 convertion 연산자의 구현 것 – jaspernygaard

+0

추가 방법 (NHibernate에 두 방법 바인딩)를 할당 할 때 수행해야 오히려 때문에 논리 다음 ConvertUsing 구문을 사용 foreach (소스의 var 항목) this.List.Add (item); –

+0

AutoMapper가 배열임을 인식하고 배열과 컬렉션 이벤트가 구현 될 때 직접 변환을 시도하지 않고 인덱스 매핑을 시도하기 때문에 AutoMapper가 작동하지 않습니다. 실제로 IList 키를 정수로 변환 할 때 실패합니다. – awe