这是发生删除的循环:在每次迭代时我都在检查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();
}
我无法解决这个问题。
答案 0 :(得分:1)
您可以尝试通过将for循环替换为:
来回避问题user.SecondaryOrganizations.RemoveWhere(o=>orgsToRemove.Any(otr=>otr.Id == o.Id));
或者
user.SecondaryOrganizations.ExceptWith(orgsToRemove);