我有一个客户类。
public class Customer
{
private string _id;
private string _name;
// some more properties follow
我从 MyEqualityComparer(客户)继承了 EqualityComparer。
我打算在 LINQ 查询中使用它。
MyEqualityComparer 用于两个对象之间的部分检查。
如果 customer.id 和 customer.name 匹配,我会平等对待对象。
public class MyComparer : System.Collections.Generic.EqualityComparer<Customer>
{
public override bool Equals(Customer x, Customer y)
{
if (x.Id == y.Id && x.Name == y.Name)
return true;
else
return false;
}
public override int GetHashCode(Customer obj)
{
return string.Concat(obj.Id,obj.Name).GetHashCode();
}
}
我提到了 generating hashcode .
我不太确定连接字符串并将其用作哈希码。
我正在尝试做的事情是否安全可靠?
最佳答案
参见 this question on hashcodes一种基于多个字段返回一个哈希码的非常简单的方法。
话虽如此,我不会从 EqualityComparer<T>
派生我自己 - 我只是实现 IEqualityComparer<T>
直接地。我不确定什么值 EqualityComparer<T>
真的在这里给你,除了还实现非通用 IEqualityComparer
.
还有一些事情:
- 你应该处理 Equals 中的无效
您现在的 Equals 代码可以简化为:
return x.Id == y.Id && x.Name == y.Name;
更完整的 Equals 实现可能是:
public override bool Equals(Customer x, Customer y)
{
if (object.ReferenceEquals(x, y))
{
return true;
}
if (x == null || y == null)
{
return false;
}
return x.Id == y.Id && x.Name == y.Name;
}
关于c# - 继承相等比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/340507/