gpt4 book ai didi

c# - 为什么我的 Equals() 实现没有被 AreEqual() 调用

转载 作者:太空狗 更新时间:2023-10-30 00:53:45 24 4
gpt4 key购买 nike

如果我想检查基于字段值而不是引用的相等性。

在尝试这样做时,我无法让它工作并将问题缩小到以下原因。

我的类(class) Subject 需要测试。在 SubjectTestEqual 中,我希望两个实例相等,但结果是“Assert.AreEqual 失败。另外,如果我调试代码,我看不到对 Equals 的调用也不是 GetHashCode

基于神秘的“Default 属性检查类型 T 是否实现了 System.IEquatable 接口(interface),如果是,则返回一个使用该实现的 EqualityComparer。否则,它返回一个使用 Object.Equals 和 Object 的覆盖的 EqualityComparer .T提供的GetHashCode。”在Why does Assert.AreEqual(T obj1, Tobj2) fail with identical objects ,我也试过IEquatable(取消注释代码看效果)无济于事。

public class Subject : IEqualityComparer<Subject>//, IEquatable<Subject>
{
public int Id { get; set; }

public Subject(int name) { Id = name; }

public bool Equals(Subject x, Subject y)
{ return (x.Id == y.Id); }

public int GetHashCode(Subject obj)
{ return Id; }

//public bool Equals(Subject other)
//{ return Equals(this, other); }
}

[TestClass]
public class SubjectTest
{
[TestMethod]
public void SubjectTestEqual()
{ Assert.AreEqual<Subject>(new Subject(1), new Subject(1)); }

[TestMethod]
public void SubjectTestSame()
{
Subject test = new Subject(1);
Assert.AreEqual<Subject>(test, test);
}
}

任何人都可以阐明这一点吗?

最佳答案

您必须重写基本方法才能调用您的方法:

public override bool Equals(object obj)
{ ... }

public override int GetHashCode()
{ ... }

但您必须应用与 EqualsGetHashcode 基本方法相同的签名。

关于c# - 为什么我的 Equals() 实现没有被 AreEqual() 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15251820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com