作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个愚蠢的问题。我定义了一个包含许多数据成员的类,如下所示:
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
不会(如果你愿意,我可以提供一个具体的例子,但请相信我:这不能保证)。
关于c# - 如何在 C# 中比较两个实例的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9902171/
我是一名优秀的程序员,十分优秀!