동일한 유형의 두 객체를 비교하고 차이를 FieldChange
객체의 목록으로 반환합니다. 지금은 조금씩 차선책 인 것처럼 각 필드 비교를 나열하고 있습니다.이 C# 비교 코드를 좀 더 일반적인 방법으로 만들 수 있습니까?
반복을 피하기 위해 아래 코드를 리팩토링하는 더 깨끗한 방법이 있습니까? 아래에 두 세트의 코드가 있지만 실제로는 약 20 가지 비교가 있습니다.
var changes = new List<FieldChange>();
if (proposedUpdatedProject.StatusId != existingProject.StatusId)
{
var previousStatusName = existingProject.StatusShortName;
existingProject.Status = ProjectModel.Repository.Fetch<ProjectStatus>(proposedUpdatedProject.StatusId);
changes.Add(new FieldChange { FieldName = "Status", PreviousValue = previousStatusName, NewValue = existingProject.StatusShortName });
}
if (proposedUpdatedProject.TechOwnerId != existingProject.TechOwnerId)
{
var previousTechOwnerName = existingProject.TechOwnerName;
existingProject.TechOwner = ProjectModel.Repository.Fetch<Person>(proposedUpdatedProject.TechOwnerId);
changes.Add(new FieldChange { FieldName = "Tech Owner", PreviousValue = previousTechOwnerName, NewValue = existingProject.TechOwnerName });
}
참고 : 모든 개체는 BaseObj라는 동일한 개체에서 파생됩니다. 또한 FieldChange 객체 (id 대 Name 속성)에 비교 가능한 필드의 값을 넣는 것이 아닙니다.
당신은 [codereview.se]를 시도해 볼 수 있습니다 ... – Adam