gpt4 book ai didi

c# - 从 IEnumerable 中删除项目

转载 作者:IT王子 更新时间:2023-10-29 03:52:59 29 4
gpt4 key购买 nike

我有 2 个 IEnumerable 集合。

IEnumerable<MyClass> objectsToExcept 

IEnumerable<MyClass> allObjects.

objectsToExcept 可能包含来自 allObjects 的对象。

我需要从 objectsToExcept 中的 allObjects 对象中移除。例如:

foreach (var myClass in objectsToExcept)
{
allObjects.Remove(myClass);
}

或者

allObject.Except(objectsToExcept)

但它不起作用。方法执行后的计数表明没有项目被删除。

最佳答案

我不知道第一个版本如何编译,除非您使用结果,否则第二个版本不会做任何事情。它不会从现有集合中删除任何内容——实际上,甚至可能 没有内存中的集合支持它。它只返回一个序列,当迭代该序列时,将返回适当的值。

如果您正在使用结果,例如

IEnumerable<MyClass> others = allObjects.Except(objectsToExcept);
foreach (MyClass x in others)
{
...
}

那么如果您已经覆盖了 GetHashCodeEquals 或者 如果您满意使用引用相等。您是要删除逻辑上相等的值,还是在两个序列中出现相同的引用?您是否覆盖了 GetHashCodeEquals,如果是,您确定这些实现有效吗?

基本上应该没问题 - 我建议您尝试创建一个简短但完整的程序来演示问题;我怀疑这样做时,您会发现问题所在。

关于c# - 从 IEnumerable<T> 中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3185975/

29 4 0