같은 유형의 두 객체를 비교하는 메소드를 정의해야합니다. 객체의 유형은 구체적이지 않습니다. 개체가 DLL 형식 일 수 있으므로 Equals
메서드를 재정의 할 수 없습니다. 나는 이것을 반영해야만한다. 이 코드는 객체의 모든 멤버가 프리미티브 유형 인 경우 작동합니다. 그러나 객체가 원시가 아닌 필드를 가지고있을 때는 작동하지 않습니다. 리플렉션으로 어떻게 할 수 있습니까?알 수없는 유형의 두 객체가 동일한 지 확인하고 모든 필드를 비교하십시오.
public bool Equals(object obj1, object obj2)
{
List<FieldInfo> fieldInfos = obj1.GetType().GetFields().ToList();
return (fieldInfos.Select(fieldInfo => new {fieldInfo, type = fieldInfo.GetType()})
.Where(@t => @t.type.IsPrimitive || @t.type == typeof(string) || @t.type == typeof(Decimal))
.Select(@t => @t.fieldInfo)).All(fieldInfo => fieldInfo.GetValue(obj1).Equals(fieldInfo.GetValue(obj2)));
}