문제

내가 쓴 한 정체되는 방법을 사본 속성 값에서 다른 하나의 개체.그것은 걱정하지 않는 어떤 종류는 각 개체입니다만 그들이 동일한 속성입니다.습니다,그래서 나는 엔지니어링 그것 또한,하지만 무엇을 개선이겠는가?

여기에는 코드:

public class ShallowCopy
{
    public static void Copy<From, To>(From from, To to)
        where To : class
        where From : class
    {
        Type toType = to.GetType();
        foreach (var propertyInfo in from.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance))
        {
            toType.GetProperty(propertyInfo.Name).SetValue(to, propertyInfo.GetValue(from, null), null);
        }
    }
}

나는 그것을 사용하여 다음과 같다:

EmployeeDTO dto = GetEmployeeDTO();
Employee employee = new Employee();
ShallowCopy.Copy(dto, employee);
도움이 되었습니까?

해결책

DTOS 직렬화 가능합니까? 나는 그렇게 기대할 것이다.

MemberInfo[] sm = FormatterServices.GetSerializableMembers(typeof(From));
object[] data = FormatterServices.GetObjectData(from, sm);
FormatterServices.PopulateObjectMembers(to, sm, data);

그러나 나는이 일반적인 접근법에 실제로 동의하지 않습니다. 각 DTO가 구현하는 DTO를 복사하기위한 강력한 계약을 선호합니다.

다른 팁

  • 유형 매개 변수 이름을 변경하여 이름 지정 규칙 (예 : TFROM 및 TTO 또는 TSOURCE 및 TDEST) (또는 TDESTINATION)을 준수하십시오.

  • 일반적인 방법이 아닌 일반적인 유형으로 대부분의 작업을 수행하십시오. 이를 통해 속성을 캐시하고 유형 추론을 허용 할 수 있습니다. 익명 유형을 사용할 수 있으므로 "TFROM"매개 변수에서 유형 추론이 중요합니다.

  • 속성을 복사하고 "From"유형에 유효한 대의원에 보관하여 코드를 동적으로 생성하여 맹목적으로 빠르게 만들 수 있습니다. 또는 잠재적으로 모든마다/쌍에 대해 그것을 생성 할 수 있습니다. 이는 실제 복사가 반사를 전혀 사용할 필요가 없다는 것을 의미합니다! (코드를 준비하는 것은 한 쌍의 유형 당 일회성 적중이지만 쌍이 너무 많지 않기를 바랍니다.)

새로운 인스턴스를 만든 새로운 방법 To 그리고 Copy() 반환하기 전에 방법이 유용 할 수 있습니다.

이와 같이:

public static To Create<From, To>(From from)
    where To : class, new()
    where From : class
{
    var to = new To();
    Copy(from, to);
    return to;
}

당신이 원하는 것을 결정하는 경우 통과 물체의 형식을 공유하는 몇 가지 특성하지만 아닙니다.체크의 존재에 대한 속성 From 체에서 To 체하기 전에 설정된 그것의 값입니다.지"옳은"당신이 올 때는 속성이 존재하지 않습니다.는 경우에는 모든 대중의 속성이 동일할 필요가 필요합니다 다음 확인하려면을 설정 모두에 To 체 및 처리하는 경우에 없다.

나는 또한 제안 사용할 수 있는 특성을 장식하는 속성을 복사해야 하고 무시하는 다른 사람입니다.이것은 당신을 사이에 두 개의 서로 다른 객체를 더 쉽고 유지하기 위해 계속 일부 공용 속성이 파생되는 보다는 오히려에 저장된 비즈니스 개체입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top