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
        */ 
    

 

posted @   iDEAAM  阅读(9918)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示