티스토리 뷰
서로 다른 두 객체간 이름이 같은 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);
}
}
'C#' 카테고리의 다른 글
C#: Blazor IIS 배포 후 Route 이슈 (2) | 2021.12.13 |
---|---|
C#: Blazor 전역 로그인 체크 (0) | 2021.12.01 |
C#: 프로그램 구동 시 관리자 권한으로 재실행 (0) | 2021.11.22 |
C#: OverlayDialog (불투명한 배경의 Dialog) (0) | 2021.09.21 |
C#: 아이콘 폰트를 사용해보자. (webdings, wingdings) (0) | 2021.03.28 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday