首页 > 解决方案 > HashSet exceptWith 不适用于复杂类型

问题描述

G'day,我试图找出我在 SQL 服务器上的数据和我在本地存储的数据之间的区别。我将本地和 SQL 数据存储在 2 个单独的 HashSet 中。

现在我可以确认哈希集之间只有 1 个点的差异,但是当我运行SQLHashSet.ExceptWith(LocalHashSet)它时,它会为我提供完整的哈希集,而不仅仅是一条额外的记录。

我正在使用这种自定义类型:

class Client : IEquatable<Client>
{
    public string ID { get; set; }
    public override int GetHashCode() 
    {
        return StringComparer.InvariantCulture.GetHashCode(this.ID);
    }
    public override bool Equals(object obj)
    {
        return Equals(obj as Client);
    }

    public bool Equals(Client obj)
    {
        return obj != null && StringComparer.InvariantCulture.Equals(ID, obj.ID);
    }
}

我对 exceptWith 如何工作的理解是错误的,还是我需要设计自己的方式来比较列表?

标签: c#hashset

解决方案


您的代码应该与您实施IEquatable<Client>和覆盖的方式一起使用GetHashCode,因此问题实际上很可能出在您的数据上。您应该确保在将数据加载到您的数据之前对其进行修剪HashSet,因为"SomeValue"不会匹配"SomeValue "


推荐阅读