List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络
当用 foreach 遍历Collection时,如果对Collection有Add或者Remove操作时,会发生以下运行时错误: "Collection was modified; enumeration operation may not execute." 如下所示: [c-sharp] view plaincopy List< string > list = new List< string >(); for ( int i = 0; i < 10; i++) { list.Add(i.ToString()); } foreach ( string str in list) { //will throw InvalidOperationException in runtime. list.Remove(str); } 究其原因,是因为Collection返回的IEnumerator把当前的属性暴露为只读属性,所以对其的修改会导致运行时错误,只需要把 foreach 改为 for 来遍历就好了。 对于Hashtable,由于没有提供[]操作符来供 for 遍历,可以先把item存入到一个array中,然后再对其进行Remove或Add操作,如下: [c-sharp] view plaincopy Hashtable ht = new Hashtable(); for ( int i=0;i<10;i++) { ht.Add(i, i); } List< object > keys = new List< object >(); foreach (DictionaryEntry de in ht) { /* operations for ht * */ //store related keys keys.Add(de); } //another for loop to operate ht for ( int i = 0; i < keys.Count; i++) { /* operations for tagged keys */ } |
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决