gpt4 book ai didi

c# collection.RemoveAll(collection.OfType());

转载 作者:太空狗 更新时间:2023-10-30 00:03:31 26 4
gpt4 key购买 nike

我可以做这样的事情吗:

collection.RemoveAll(collection.OfType<type>());

要从集合中删除给定类型的所有元素?

最佳答案

两个已经提交的答案都是正确的,但是省略了为什么发布者的示例代码不起作用的解释。几个有趣的观点:

首先,RemoveAll()未在 ICollection 中定义或 ICollection<T>界面;它在 List<T> 上定义,例如,但在 HashSet<T> 上的语义等效方法叫做RemoveWhere() .如果您希望能够对任何 ICollection<T> 执行此操作, 你应该写一个扩展方法。

其次,问题的示例代码传递了一系列要从集合中删除的项目,但是 List<T>.RemoveAll()HashSet<T>.RemoveWhere()采用谓词来标识要删除的项目(如其他答案所示)。你可以编写你的扩展方法来采用另一种方法,并传递 IEnumerable<T>就像你的例子一样。但是,您需要小心,因为您不能这样做:

foreach (var item in collection)
if (ShouldRemove(item))
collection.Remove(item);

如果你尝试这样做,你应该得到一个 InvalidOperationException带有类似“集合已修改;枚举操作可能无法执行。”的消息。

关于c# collection.RemoveAll(collection.OfType<type>());,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362440/

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