我有 2 个 IEnumerable 集合。
IEnumerable<MyClass> objectsToExcept
and
IEnumerable<MyClass> allObjects.
objectsToExcept
可能包含来自的对象allObjects
.
我需要从中删除allObjects
对象在objectsToExcept
。例如:
foreach (var myClass in objectsToExcept)
{
allObjects.Remove(myClass);
}
Or
allObject.Except(objectsToExcept)
但这不起作用。方法执行后的计数表明没有任何项目被删除。
我不知道第一个版本如何编译,除非您使用结果,否则第二个版本不会执行任何操作。它不会从现有集合中删除任何内容 - 事实上,甚至可能没有be支持它的内存中集合。它只是返回一个序列,当迭代时,该序列将返回适当的值。
If you are使用结果,例如
IEnumerable<MyClass> others = allObjects.Except(objectsToExcept);
foreach (MyClass x in others)
{
...
}
那么应该没问题if你已经覆盖了GetHashCode
and Equals
or如果您乐意使用引用相等。您是否尝试删除逻辑上相等的值,或者执行相同的操作参考出现在两个序列中?你有没有覆盖GetHashCode
and Equals
,如果是这样,您确定这些实现有效吗?
基本上应该没问题 - 我建议你尝试创建一个简短但完整的程序来演示该问题;我怀疑,当你这样做时,你会发现问题所在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)