Я бы посоветовал вам переопределить метод Equals
в своем классе, чтобы выполнить желаемое сравнение. Это позволяет вам определять равенство значений вместо ссылочного равенства. Одно предостережение в том, что вам также необходимо переопределить GetHashCode
, если вы переопределите Equals
, чтобы гарантировать, что два равных объекта также возвращают одинаковый хэш-код. Вот очень простой пример:
public class Foo {
public String Bar {
get;
set;
}
public String Baz {
get;
set;
}
public override Boolean Equals(Object other) {
Foo otherFoo = other as Foo;
return otherFoo != null
&& Bar.Equals(otherFoo.Bar)
&& Baz.Equals(otherFoo.Baz);
}
public override Int32 GetHashCode() {
return Bar.GetHashCode() ^ Baz.GetHasCode();
}
}
Если вы не хотите переопределять Equals
и действительно хотите сравнить свойство экземпляров по свойству, вы можете использовать отражение:
public static Boolean AreEqual<T>(T a, T b) {
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
if (!Object.Equals(propertyInfo.GetValue(a, null),
propertyInfo.GetValue(b, null)))
return false;
return true;
}