티스토리 뷰

C#

C#: Property Copy

개태형님 2021. 11. 28. 20:39

서로 다른 두 객체간 이름이 같은 Property의 값을 복사하는 방법.

Reflection을 이용하여 각 Property의 이름을 취득하고, 값을 Set 해준다.

원본 객체의 특정 Property이름을 제외하고 복사할 수 있다.

 

        /// <summary>
        /// source 오브젝트에서 result 오브젝트로 Property의 값을 복사해준다.
        /// </summary>
        /// <param name="source">원본</param>
        /// <param name="result">대상</param>
        /// <param name="ignorePropertyFilter">제외할 Property 목록</param>
        public static void CopyProperties(object source, object result, string[] ignorePropertyFilter)
        {
            PropertyInfo[] sourceProperties = source.GetType().GetProperties();
            PropertyInfo[] resultProperties = result.GetType().GetProperties();
            foreach (var sp in sourceProperties)
            {
                if (ignorePropertyFilter != null && ignorePropertyFilter.Contains(sp.Name)) continue;

                var rp = resultProperties.FirstOrDefault(o => o.Name == sp.Name && o.PropertyType == sp.PropertyType && o.GetSetMethod() != null);
                if (rp == null) continue;

                rp.SetValue(result, sp.GetValue(source, null), null);
            }
        }
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday