itsource

두 개체를 비교하여 차이점을 찾습니다.

mycopycode 2023. 5. 7. 11:25
반응형

두 개체를 비교하여 차이점을 찾습니다.

두 물체를 비교하고 차이점을 찾는 가장 좋은 방법은 무엇입니까?

Customer a = new Customer();
Customer b = new Customer();

단일 유연한 솔루션:반사를 사용하여 모든 속성을 열거하고 어떤 속성이 동일한지 여부를 확인한 다음 일부 속성 목록과 서로 다른 값을 반환할 수 있습니다.

다음은 당신이 요청하는 것에 대해 좋은 시작이 되는 코드의 예입니다.지금은 필드 값만 살펴보지만 반사를 통해 확인할 수 있도록 다른 구성 요소를 추가할 수 있습니다.모든 개체가 사용할 수 있도록 확장 방법을 사용하여 구현됩니다.

사용할 제품

    SomeCustomClass a = new SomeCustomClass();
    SomeCustomClass b = new SomeCustomClass();
    a.x = 100;
    List<Variance> rt = a.DetailedCompare(b);

비교할 나의 샘플 수업

    class SomeCustomClass
    {
        public int x = 12;
        public int y = 13;
    }

그리고 고기와 감자.

using System.Collections.Generic;
using System.Reflection;

static class extentions
{
    public static List<Variance> DetailedCompare<T>(this T val1, T val2)
    {
        List<Variance> variances = new List<Variance>();
        FieldInfo[] fi = val1.GetType().GetFields();
        foreach (FieldInfo f in fi)
        {
            Variance v = new Variance();
            v.Prop = f.Name;
            v.valA = f.GetValue(val1);
            v.valB = f.GetValue(val2);
            if (!Equals(v.valA, v.valB))
                variances.Add(v);

        }
        return variances;
    }


}
class Variance
{
    public string Prop { get; set; }
    public object valA { get; set; }
    public object valB { get; set; }
}

메소드와 인터페이스를 사용하여 두 개체가 동일한지 여부를 알 수 있지만 개체 간의 차이를 알 수는 없습니다.각 속성 값을 비교하여 반사를 사용할 수 있습니다.

그러나 다른 접근 방식은 이러한 인스턴스를 텍스트 형식으로 직렬화하고 결과 문자열(XML, JSON 등) 내부의 차이를 비교하는 것으로 구성될 수 있습니다.

언급URL : https://stackoverflow.com/questions/4951233/compare-two-objects-and-find-the-differences

반응형