ala*_*ere 4 .net c# collections types set
我可以这样做:
collection.RemoveAll(collection.OfType<type>());
Run Code Online (Sandbox Code Playgroud)
要从集合中删除给定类型的所有元素?
两个已经提交的答案都是正确的,但省略了解释为什么海报的示例代码不起作用.一些有趣的观点:
首先,RemoveAll()在没有定义ICollection或ICollection<T>接口; List<T>例如,它被定义,但是HashSet<T>调用了语义上等效的方法RemoveWhere().如果您希望能够为任何人执行此操作 ICollection<T>,则应编写扩展方法.
第二,这个问题的示例代码传递到被从集合中删除的项目的顺序,但List<T>.RemoveAll()并HashSet<T>.RemoveWhere()采取谓词,以确定待除去的项(如图所示的其他的答案).您可以编写扩展方法以采用其他方法,并IEnumerable<T>在示例中传递as.但是,你需要小心,因为你不能这样做:
foreach (var item in collection)
if (ShouldRemove(item))
collection.Remove(item);
Run Code Online (Sandbox Code Playgroud)
如果您尝试这样做,您应该得到一个InvalidInvalidOperationException,其中包含"收集已被修改;枚举操作可能无法执行"之类的消息.
我会做这样的事情:
collection.RemoveAll(i => collection.OfType().Contains(i));
collection.RemoveAll(i => i is type);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8509 次 |
| 最近记录: |