gpt4 book ai didi

c# - 使用 linq where 删除 foreach 内部

转载 作者:可可西里 更新时间:2023-11-01 08:13:56 25 4
gpt4 key购买 nike

我明白为什么这是不允许的:

foreach (Thing t in myCollection) {
if (shouldDelete(t) {
myCollection.Delete(t);
}
}

但是这个怎么样?

foreach (Thing t in myCollection.Where(o=>shouldDelete(o)) {
myCollection.Delete(t);
}

我不明白为什么会失败。 “Where()”方法显然不会返回原始集合,因此当我尝试从原始集合中删除某些内容时,我不会对原始集合进行枚举。

最佳答案

I don't understand why this fails.

我假设您的问题是“为什么会失败?” (你忘了在你的问题中实际问一个问题。)

The "Where()" method obviously isn't returning the original collection

正确。 “哪里”返回 IEnumerable<T>它代表集合,上面有一个过滤器。

so I am not enumerating round the original collection when I try to remove something from it.

不正确。您正在枚举原始集合。您正在枚举原始集合并在其之上放置了过滤器

当您调用“Where”时,它不会立即评估过滤器并生成应用了过滤器的原始集合的全新副本。相反,它会为您提供一个枚举原始集合的对象,但会跳过与过滤器不匹配的项目。

当您在一家商店说“给我看一切”时,那个向您展示一切的人就会向您展示一切。当您说“现在只给我看每公斤 1 到 5 美元的苹果”时,您并不是在 build 一个里面只有苹果的全新商店。您正在查看与以前完全相同的东西集合,只是上面有一个过滤器。

关于c# - 使用 linq where 删除 foreach 内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10174803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com