覆盖C#中具有许多属性的类的等于

Ben*_* B. 5 c# equals

我有许多数据类,它们具有超过25种不同值类型的属性(随着需求的变化,这可能在将来发生变化).我想覆盖equals,主要用于单元测试目的.

目前,我知道如何做到这一点的唯一方法是实际测试硬编码的每个属性的相等性.这看起来很糟糕有两个原因 - 首先,我将编写大量代码来测试25个属性的相等性 - 第二,如果其中一个类中的属性在稍后的时间点添加,则Equals方法将不会检查这很可能会被忽视并导致问题.

由于Equals通常会检查类的属性,因此应该有一种方法来动态比较要比较的类的属性,这可以确保对类的属性更改不会导致Equals的错误实现.有没有办法做到这一点?

Car*_*ten 4

你可以使用反射编写类似的东西 - 但这会非常慢。我会坚持使用平等,但要考虑一下你真正需要平等的部分。我通常只检查不可变部分(如 Id)是否相等,而忽略可变字段,我认为这是一个很好的做法。