如何比较两个实例';C#中的内容
本文关键字:两个 何比较 比较 实例 | 更新日期: 2023-09-27 18:29:25
我有一个愚蠢的问题。我定义了一个有许多数据成员的类,如下所示:
public class A
{
public string Name { get; set; }
public double Score { get; set; }
//...many members
public C Direction { get; set; }
public List<B> NameValue1 { get; set; }
public List<string> NameValue2 { get; set; }
//...many members
}
现在,我正在编写单元测试代码,并希望比较类A的两个实例。但我发现这不起作用:
Assert.AreEquals(a1, a2);
我必须重写Equals
方法才能做到这一点?C#默认情况下对此没有帮助?或者我可以序列化这两个家伙并比较文件流?
谢谢。
对于引用类型,默认的相等实现是引用相等:"这是同一个实例吗"。对于等价性,是的,如果你需要的话,你应该自己写,但是:它很少真的那么有用(这是一个问题,因为如果你重写Equals
,你也应该重写GetHashCode
,用一个合适的并行实现
就我个人而言,如果这段代码不是主系统的一部分,我会在单元测试中手动进行比较。
列表也是一种痛苦,因为有三种选择:
- 同一列表实例
- 具有相同内容实例的不同列表
- 具有等效内容实例的不同列表
你可能是指最后一个,但这是同样的问题,重复。
重新序列化:这也很棘手,因为它取决于序列化程序和内容。除非a:您的类型已经用于序列化,并且b:您选择的序列化程序保证了您所指的语义,否则我不建议使用该路由。例如,BinaryFormatter
没有(如果您愿意,我可以提供一个具体的例子,但请相信我:这是不保证的)。