我这里有一个愚蠢的问题。 我定义了一个包含许多数据成员的类,如下所示:
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#无法解决这个问题?
或者我可以序列化这两个人并比较文件流?
谢谢。
答案 0 :(得分:6)
对于引用类型,默认的相等实现是引用相等:“这是同一个实例”。对于等价,是的,如果你需要,你应该自己编写,但是:它很少真正有用(而且有问题,因为如果你覆盖Equals
,你也应该覆盖GetHashCode
,一个适当的并行实现。
就个人而言,如果此代码不属于您的主系统,我会在您的单元测试中进行手动比较。
列表也很痛苦,因为有三种选择:
你可能意味着最后一次,但这是同样的问题,重复。
重新序列化:这也很棘手,因为它取决于序列化器和内容。我不建议使用该路由,除非:您的类型已经用于序列化,而b:您选择的序列化程序保证您的语义。例如,BinaryFormatter
不(如果您愿意,我可以提供具体示例,但请相信我:这不能保证)。