继承相等比较器 [英] Inheriting the equality comparer
问题描述
我有一个Customer类.
I have a Customer class.
public class Customer
{
private string _id;
private string _name;
// some more properties follow
我正在继承EqualityComparer表单MyEqualityComparer(客户).
我打算在LINQ查询中使用它.
MyEqualityComparer用于在两个对象之间进行部分检查.
如果customer.id和customer.name匹配,则将对象视为相等.
I am inheriting the EqualityComparer form MyEqualityComparer(of Customer).
This I am intending to use in LINQ queries.
MyEqualityComparer is intended for partial check between two objects.
If the customer.id and customer.name matches I treat the objects the equal.
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();
}
}
我提到了生成哈希码.
我对串联字符串并将其用作哈希码不太确定.
这是我要尝试的安全可靠的方法吗?
I referred to generating hashcode.
I am little unsure about concatenating strings and using that as a hashcode.
Is this safe and sound what I am trying to do ?
推荐答案
请参见有关哈希码的问题,以一种非常简单的方法返回一个基于多个字段的哈希码.
See this question on hashcodes for a pretty simple way to return one hashcode based on multiple fields.
话虽如此,我自己不会从EqualityComparer<T>
派生-我只会直接实现IEqualityComparer<T>
.除了也实现非泛型的IEqualityComparer
之外,我不确定EqualityComparer<T>
的真正含义是什么.
Having said that, I wouldn't derive from EqualityComparer<T>
myself - I'd just implement IEqualityComparer<T>
directly. I'm not sure what value EqualityComparer<T>
is really giving you here, other than also implementing the non-generic IEqualityComparer
.
还有两件事:
- 您应该在等于中处理空值
-
您当前的Equals代码可以简化为:
- You should handle nullity in Equals
Your present Equals code can be simplified to:
return x.Id == y.Id && x.Name == y.Name;
更完整的Equals实现可能是:
A fuller implementation of Equals might be:
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;
}
这篇关于继承相等比较器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!