【发布时间】:2014-08-07 07:18:34
【问题描述】:
这是删除发生的循环:在每次迭代中,我检查 memSo 是否在 orgsToRemove 中,当它是时,我将它从 user.SecondaryOrgansations 中删除。然而,在调试器中检查这个集合,在 Remove() 之后它并没有改变。
user.SecondaryOrganisations 和 orgsToRemove 都是 HashSet。
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
}
这是Organization类中的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();
}
我就是想不通。
【问题讨论】:
-
您是否明确检查了对 Remove 的调用的返回值?
-
Remove() 返回 true!
-
你能发布一个重现上述问题的示例程序吗?
-
SecondaryOrganisations背后的实现是什么? IE。如果它是一个总是创建一个新的HashSet(从某个地方填充它)的属性,那么这段代码没有(整体)影响也就不足为奇了。 -
Damien_The_Unbeliever 拥有它!我只是假设这是一个简单的属性……假设是所有错误的根源。随意张贴作为答案,我会标记它是正确的。