.NET:为什么这个HashSet.Remove()不起作用?

时间:2014-08-07 07:18:34

标签: .net hashset

这是发生删除的循环:在每次迭代时我都在检查memSo是否在orgsToRemove中,当它从user.SecondaryOrgansations中删除时。但是,在调试器中检查此集合,它在Remove()之后不会改变。

user.SecondaryOrganisations和orgsToRemove都是HashSets。

foreach (var memSo in user.SecondaryOrganisations.ToList())
{
     if (orgsToRemove.Any(so => so.Id == memSo.Id))
         user.SecondaryOrganisations.Remove(memSo); //This line is hit, actually returns TRUE, but does nothing
}

这是组织类

中的Equals()和GetHashCode()
public override bool Equals(object obj)
{
    if (obj == null || GetType() != obj.GetType())
        return false;

    var p = (Organisation)obj;
        return (Id == p.Id); // This is hit when Remove is called and is TRUE
}

public override int GetHashCode()
{
    return Id.GetHashCode();
}

我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以尝试通过将for循环替换为:

来回避问题
user.SecondaryOrganizations.RemoveWhere(o=>orgsToRemove.Any(otr=>otr.Id == o.Id));

或者

user.SecondaryOrganizations.ExceptWith(orgsToRemove);