C#HashSet Generic允许重复
读取MSDN上的HashSet时,它会使用C#HashSet Generic允许重复,c#,hashset,C#,Hashset,读取MSDN上的HashSet时,它会使用HashSet,如果T实现IEquatable,则HashSet将其用于IEqualityComparer.Default 因此,让学生们: public class Person : IEquality<Person> { private string pName; public Person(string name){ pName=name; } public string Name { g
HashSet
,如果T实现IEquatable
,则HashSet将其用于IEqualityComparer.Default
因此,让学生们:
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;}
}
公共类人员:IEquality
{
私有字符串pName;
公众人物(字符串名称){pName=name;}
公共字符串名
{
获取{return pName;}
设置
{
if(pName.Equals(value,StringComparison.invariantCultureInogoreCase))
{
回来
}
pName=值;
}
}
公共布尔等于(其他人)
{
如果(other==null){return false;}
返回pName.Equals(other.pName、StringComparison.InvariantCultureInogoreCase);
}
公共覆盖布尔等于(对象对象对象)
{
人员其他=作为人员的obj;
如果(other==null){return false;}
回报等于(其他);
}
公共重写int GetHashCode(){return pName.GetHashCode();}
公共重写字符串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=newhashset();
set.Add(newperson(“Smith”);//返回true
人员p=新人员(“Smi”);
set.Add(p);//返回true
p、 Name=“Smith”//不发生错误
现在,HashSet中有两个同名的Person对象(因此有“Equals”)
HashSet让我们放置重复的对象
HashSet让我们放置重复的对象
它不允许您放入重复的对象。问题是您在添加对象后正在对其进行变异
在字典中用作键或存储为散列的对象的变化总是有问题的,我建议避免这种情况
HashSet让我们放置重复的对象
它不允许您放入重复的对象。问题是您在添加对象后正在对其进行变异
在字典中用作突变键的对象或作为哈希存储的对象总是有问题的,并且我建议避免。同意,您应该考虑删除人的设置器,使人不可变,并防止这种情况。同意,您应该考虑删除人的设置,使人不可变,并防止这种情况发生。.