Oli*_*s_j 4 c# .net-4.0 duplicates hashset
我已经读过.net4中的HashSet将忽略所有重复项.所以我做的是:
HashSet<medbaseid> medbaseidlist = new HashSet<medbaseid>();
for (int i = 2; i <= rowCount; i++)
{
medbaseid medbaseid = new medbaseid() {
mainClass = xlRange.Cells[i, 1].Value2.ToString(),
genName = xlRange.Cells[i, 2].Value2.ToString(),
speciality = xlRange.Cells[i, 3].Value2.ToString(),
med_type_id = getId(xlRange.Cells[i, 4].Value2.ToString(),
id = i-1
)
};
medbaseidlist.Add(medbaseid);
}
Run Code Online (Sandbox Code Playgroud)
medbaseid 可以具有与上一个对象相同的值.
但是如果我最后检查哈希集,则会有重复的项目. 
我添加的equals和gethashcode方法但没有帮助.我还在课堂上添加了一个id.所以2个对象可以具有相同的内容但不同的id:
public override bool Equals(object obj)
{
medbaseid medb = (medbaseid)obj;
return ((medb.id == this.id) && (medb.genName == this.genName) && (medb.mainClass == this.mainClass) && (medb.med_type_id == this.med_type_id) && (medb.speciality == this.speciality)) ? true : false;
}
public override int GetHashCode()
{
return id;
}
Run Code Online (Sandbox Code Playgroud)
所以我现在的问题是:我做错了什么,或者这不是正确的使用方式HashSet?在此先感谢您的帮助.
Dan*_*haw 11
这将取决于的实现GetHashCode(),并Equals()在medbaseid类.
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx.
默认情况下,如果对象实际上是同一个对象,则它们只会相等.拥有相同的"内容"并不足以使它们相等.如果您希望具有相同"内容"的两个不同对象相等,则必须重写Equals()以实现该逻辑.无论何时覆盖,Equals()您还必须覆盖GetHashCode()它们才能在散列数据结构中正常工作HashSet<>.
| 归档时间: |
|
| 查看次数: |
6379 次 |
| 最近记录: |