阅读 MSDN 上的 HashSet,它说HashSet<T>
,如果 T 实现,IEquatable<T>
则 HashSet 将其用于IEqualityComparer<T>.Default
.
所以,让 Person 类:
public class Person : IEquality<Person>
{
private string pName;
public Person(string name){ pName=name; }
public string Name
{
get { return pName; }
set
{
if (pName.Equals(value, StringComparison.InvariantCultureIgnoreCase))
{
return;
}
pName = value;
}
}
public bool Equals(Person other)
{
if(other==null){return false;}
return pName.Equals(other.pName, StringComparison.InvariantCultureIgnoreCase);
}
public override bool Equals(object obj)
{
Person other = obj as Person;
if(other==null){return false;}
return Equals(other);
}
public override int GetHashCode(){return pName.GetHashCode();}
public override string ToString(){return pName;}
}
所以,让我们在另一个类或主函数中定义:
HashSet<Person> set = new HashSet<Person>();
set.Add(new Person("Smith"); // return true
Person p = new Person("Smi");
set.Add(p); // return true
p.Name = "Smith"; // no error occurs
现在,您在 HashSet 中有两个同名的 Person 对象(因此,有“Equals”)。
HashSet 让我们放置重复的对象。