두 개체를 비교하고 다른 모든 속성 이름 목록을 반환하는 메서드가 있습니다.C#을 사용하여 중첩 된 개체 속성 비교
public class Address
{
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
}
public class Employee
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public Address EmployeeAddress { get; set; }
}
나는 다음과 같은 두 직원 인스턴스를 비교하는 것을 시도하고있다 : 나는이 두 직원의 물체를 통과 할 때 그래서
var emp1Address = new Address();
emp1Address.AddressLine1 = "Microsoft Corporation";
emp1Address.AddressLine2 = "One Microsoft Way";
emp1Address.City = "Redmond";
emp1Address.State = "WA";
emp1Address.Zip = "98052-6399";
var emp1 = new Employee();
emp1.FirstName = "Bill";
emp1.LastName = "Gates";
emp1.EmployeeAddress = emp1Address;
var emp2Address = new Address();
emp2Address.AddressLine1 = "Gates Foundation";
emp2Address.AddressLine2 = "One Microsoft Way";
emp2Address.City = "Redmond";
emp2Address.State = "WA";
emp2Address.Zip = "98052-6399";
var emp2 = new Employee();
emp2.FirstName = "Melinda";
emp2.LastName = "Gates";
emp2.EmployeeAddress = emp2Address;
을 다음과 같이 내가이 개 수업을 예를 들어
public static IList<string> GetDifferingProperties(object source, object target)
{
var sourceType = source.GetType();
var sourceProperties = sourceType.GetProperties();
var targetType = target.GetType();
var targetProperties = targetType.GetProperties();
var properties = (from s in sourceProperties
from t in targetProperties
where s.Name == t.Name &&
s.PropertyType == t.PropertyType &&
s.GetValue(source,null) != t.GetValue(target,null)
select s.Name).ToList();
return properties;
}
내 GetDifferingProperties 메서드에 현재 그것은 FirstName 및 EmployeeAddress를 반환하지만 EmployeeAddress의 어떤 정확한 속성 (이 경우 Address1)이 변경되었는지는 알려주지 않습니다. EmployeeAddress.Address1과 같은 것을 얻기 위해 어떻게이 방법을 조정할 수 있습니까?
왜 내가 사용했는지 Isprimitive, 내가 ur 코드를 사용하려고 할 때, 그리고 언제 isPrimitive를 꺼내 나 항상 불일치가되는지 설명 할 수 있습니까? 동일한 부분에 오류가 있습니다. 고맙습니다 – jprbest