MSDN で HashSet を読むと、 with と表示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 に同じ名前の 2 つの Person オブジェクトができました (そのため、「Equals」が存在します)。
HashSet を使用すると、オブジェクトを複製できます。