문제
내가 쓴 한 정체되는 방법을 사본 속성 값에서 다른 하나의 개체.그것은 걱정하지 않는 어떤 종류는 각 개체입니다만 그들이 동일한 속성입니다.습니다,그래서 나는 엔지니어링 그것 또한,하지만 무엇을 개선이겠는가?
여기에는 코드:
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
체 및 처리하는 경우에 없다.
나는 또한 제안 사용할 수 있는 특성을 장식하는 속성을 복사해야 하고 무시하는 다른 사람입니다.이것은 당신을 사이에 두 개의 서로 다른 객체를 더 쉽고 유지하기 위해 계속 일부 공용 속성이 파생되는 보다는 오히려에 저장된 비즈니스 개체입니다.