HashSet ExceptWith不适用于复杂类型

时间:2018-10-08 22:17:11

标签: c# hashset

G'day, 我正在尝试查找SQL Server上的数据与本地存储的数据之间的区别。我将本地数据和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如何工作理解不正确,还是我需要设计自己的比较列表的方式?

1 个答案:

答案 0 :(得分:1)

您的代码应与您实现IEquatable<Client>并重写GetHashCode的方式一起使用,因此问题很可能出在您的数据上。您应该确保在将数据加载到HashSet之前已修剪掉数据,因为"SomeValue""SomeValue "不匹配。