同じ型の2つの異なるオブジェクトを比較するメソッドを定義する必要があります。オブジェクトのタイプは特定ではありません。オブジェクトはDLLタイプなので、Equals
メソッドをオーバーライドすることはできません。私はこれを反映させる必要があります。このコードは、オブジェクトのすべてのメンバーがプリミティブ型である場合に機能します。しかし、オブジェクトがプリミティブでないフィールドを持っている場合は機能しません。どのように私は反射でそれを行うことができますか?型が不明な2つのオブジェクトが等しいかどうかをチェックし、すべてのフィールドを比較します
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)));
}