loading

심재운 블로그

반응형



public static TTarget MapTo<TSource, TTarget>(TSource aSource) where TTarget : new()
{
    const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;

    TTarget aTarget = new TTarget();
    Hashtable sourceData = new Hashtable();
    foreach (PropertyInfo pi in aSource.GetType().GetProperties(flags))
    {                
        if (pi.CanRead)
        {
            sourceData.Add(pi.Name, pi.GetValue(aSource, null));
        }
    }

    foreach (PropertyInfo pi in aTarget.GetType().GetProperties(flags))
    {   
//fix from rvaquette           
        if (pi.CanWrite)
        {
            if(sourceData.ContainsKey(pi.Name))
            {
                pi.SetValue(aTarget, sourceData[pi.Name], null);
            }
        }
    }
    return aTarget;
}



Student source = new Student() { Id = 1, Name = "Smith" };
StudentLog target = MapTo<Student, StudentLog>(source);

위의 개념은 하나의 student 라는 클래스에 객체를 생성한 다음 studentLog 객체에 이를 할당한다.

할당 할때 동일한 속성에는 갑을 할당하여 복제본을 만들고, 맞지 않은 속성은 별도로 할당 하면 된다.



SimpleMapper.zip




반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band

댓글

비밀글모드