如何比较两个实例';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#默认情况下对此没有帮助?或者我可以序列化这两个家伙并比较文件流?

谢谢。

如何比较两个实例';C#中的内容

对于引用类型,默认的相等实现是引用相等:"这是同一个实例吗"。对于等价性,是的,如果你需要的话,你应该自己写,但是:它很少真的那么有用(这是一个问题,因为如果你重写Equals,你也应该重写GetHashCode,用一个合适的并行实现

就我个人而言,如果这段代码不是主系统的一部分,我会在单元测试中手动进行比较。

列表也是一种痛苦,因为有三种选择:

  • 同一列表实例
  • 具有相同内容实例的不同列表
  • 具有等效内容实例的不同列表

你可能是指最后一个,但这是同样的问题,重复。

重新序列化:这也很棘手,因为它取决于序列化程序和内容。除非a:您的类型已经用于序列化,并且b:您选择的序列化程序保证了您所指的语义,否则我不建议使用该路由。例如,BinaryFormatter没有(如果您愿意,我可以提供一个具体的例子,但请相信我:这是不保证的)。