c# - 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 如何工作的理解是错误的,还是我需要设计自己的方式来比较列表?
解决方案
您的代码应该与您实施IEquatable<Client>
和覆盖的方式一起使用GetHashCode
,因此问题实际上很可能出在您的数据上。您应该确保在将数据加载到您的数据之前对其进行修剪HashSet
,因为"SomeValue"
不会匹配"SomeValue "
。
推荐阅读
- java - JDBC connectino url 设置的优先级是否高于数据库服务器设置?
- reactjs - OnClick 使用路由重定向到带有道具的组件
- spring-boot - @CachePut 不更新缓存
- c# - 我想知道从顶部计数的选定节点索引包括父节点
- dapper - dapper join splitOn 多列键
- angular - Angular 根据条件使用 SCSS
- mpandroidchart - mpandroidchart 我想通过散点图中的某个值更改点颜色
- odoo - 无法在 Odoo 中创建不平衡的日记帐分录
- android - 如何在 Fragment 中覆盖 dispatchTouchEvent
- java - 如何以多行而不是一长行打印arraylist