C#HashSet Generic允许重复
在MSDN上读取HashSet,它用HashSet
,如果T实现IEquatable
则HashSet将此用于IEqualityComparer.Default
。
所以,让class级人员:
public class Person : IEquality { 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 set = new HashSet(); 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让我们放置重复的对象。
HashSet让我们放置重复的对象。
它不会让你放入重复的对象。 问题是你在添加对象后会改变它。
变异对象在字典中用作键或存储为哈希值总是有问题的,我建议避免使用它。