我需要定义一种方法来比较同一类型的两个不同对象。对象的类型不是特定的。这些对象可能是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)));
}