c# - 如何在 C# 中比较两个实例的内容?

标签 c# serialization compare equals

我有一个愚蠢的问题。 我定义了一个包含许多数据成员的类,如下所示:

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/

相关文章:

c# - 在视觉状态之间切换时 WPF 中的致命运行时错误

c# - VisualStudio 代码 csharp 调试器生成错误

c# - Json.Net 未正确序列化版本类型

c++使用包含 vector 的类的随机访问文件

javascript - 有哪些工具可用于代码比较或并排比较?如何查找 Javascript 中的错误?

javascript - 比较标题字段和数组时避免错误

C#:一种将单行 XML 文件转换为人类可读多行的简单方法

java - 从android发送序列化数据到java

检查字符串 A 的数组是否包含字符串 B 的数组中存在的字母(不起作用)

c# - 如何让 PHP 对与 C# 完全相同的输入进行签名?