1. 程式人生 > >C# 集合類Dictionary的遍歷和修改(防止錯誤:集合已修改;可能無法執行列舉操作。)

C# 集合類Dictionary的遍歷和修改(防止錯誤:集合已修改;可能無法執行列舉操作。)

       C#中直接對集合Dictionary進行遍歷並修改其中的值,會報錯,如下程式碼就會報錯:集合已修改;可能無法執行列舉操作。程式碼如下

public void ForeachDic()   
{   
     Dictionary<String, Int32> dic = new Dictionary<String, Int32>(); 
     dic.Add("1", 10);   
     dic.Add("2", 20);   
     dic.Add("3", 30);   
     foreach (KeyValuePair<String, Int32> kvp in dic)   
     {   
         Console.WriteLine(String.Format("Key:{0}; Value:{1}", kvp.Key, kvp.Value));   
         dic[kvp.Key] = 100;//此操作會報錯:集合已修改;可能無法執行列舉操作。  
     }   
}  

       解決方法就是我們可以另外建立一個數組來迴圈修改集合值,程式碼如下:

private void ForeachDic()   
{   
     Dictionary<String, Int32> dic = new Dictionary<String, Int32>(); 
     dic.Add("1", 10);   
     dic.Add("2", 20);   
     dic.Add("3", 30);  
     String[] keyArr = dic.Keys.ToArray<String>();   
     for (int i = 0; i < keyArr.Length; i++)   
     {   
         dic[keyStr[i]] = dic[keyStr[i]] + 1;   
      }   
} 


相關推薦

C# 集合Dictionary修改(防止錯誤集合修改;可能無法執行列舉操作)

       C#中直接對集合Dictionary進行遍歷並修改其中的值,會報錯,如下程式碼就會報錯:集合已修改;可能無法執行列舉操作。程式碼如下 public void ForeachDic() { Dictionary<String, In

forDictionary字典 解決foreach修改字典報集合修改可能無法執行列舉操作

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 {     class Program  

C#中foreach出現“集合修改 可能無法執行列舉操作”的解決方法

不要在列舉集合的操作(例如foreach)中去執行修改集合的操作。很多文章中提出解決方法是將foreach改為for迴圈,這裡記錄一種簡便方法。如果需要修改集合,那麼你應該先使用 ToArray() 方法,例如?1234foreach (var x in Mylist.ToA

【專案總結】ForEach時出錯報"集合修改可能無法執行列舉操作"

背景 選中全選時,把ListView對應的項選中 程式碼 m_PickServer.ForEach(delegate(string n) { foreach (ListViewIt

Reporting Services 在WIN72008下出現“授予的許可權不足,無法執行操作 (rsAccessDenied)”的解決辦

最近剛剛接觸Sql server的Reporting Services,使用它做報表。做好之後在瀏覽器下瀏覽時出現了一個錯誤:“為使用者“Caishy-PC\Caishy”授予的許可權不足,無法執行此操作。 (rsAccessDenied)”。 在谷歌上搜索此問題的解決辦法

java中常見集合

一、前言   我們經常在工作當中使用到集合,java當中的集合類較多,且自帶有豐富方法可對集合中的元素進行靈活操作,我們在使用時不必考慮資料結構和演算法實現細節,只需建立集合物件直接使用即可,這給我們帶來了極大的便利。本文對日常工作中常用的集合遍歷問題進行簡單

Java中集合set、Listmap的方式

Java中集合類的遍歷方式 Java中集合分為set、List和map。 1.set集合 set集合常用的有兩種遍歷方式: Set<String>  set = new HashSet<String>(); 第一種利用for迴圈: for(S

C# winForm 容器控件內所有Label,修改其背景色

tab () PE windows clas out ont code tostring //容器控件為tableLayoutPanel1        foreach (Control label in tableLayoutPanel1.Con

C語言由後序中序重構二叉樹練習

1 由中根序列和後根序列重建二叉樹(10分) 題目內容: 我們知道如何按照三種深度優先次序來周遊一棵二叉樹,來得到中根序列、前根序列和後根序列。反過來,如果給定二叉樹的中根序列和後根序列,或者給定中根序列和前根序列,可以重建一二叉樹。本題輸入一棵二叉樹的中根序列和後根序列,要求在記憶體中

C語言根據前序後續還原二叉樹,並輸出二叉樹的高度

7-23 還原二叉樹 (25 point(s)) 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。 輸入格式: 輸入首先給出正整數N(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區別大小寫)的字串

對dataframe的行列進行修改

首先先定一個這樣的字典,然後我們用不同的方法對其遍歷和修改 字典df df=pd.DataFrame({"A":[1,2,3,4],"B":[5,6,7,8],"C":[1,1,1,1]}) A B C 0 1 5 1 1 2 6 1 2 3 7 1 3

C++ 前序中序重構二叉樹(劍指offer)

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 這道題之前做過幾次,以前

中序後序層序

PTA-ZigZagging on a Tree (25 分) Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determin

C++拾趣——STL容器的插入、刪除、查詢操作效能對比(ubuntu g++)——查詢

遍歷 從前往後 元素個數>15000 traversal_begin_16384_highest         表現最差的是unordered_multiset。其在遍歷到1000個左右的元素時發生較高的延時操作,然後又穩定下來。         除了

使用C#操作二叉樹的插入查詢列印(程式碼)

Node類: public class Node { public int Item { set; get; } //節點資料 public Node LeftChild { set; get; } //左子節點的引用

JSP頁面通過c:forEach標籤迴圈List集合

<c:forEach>標籤有如下屬性: 屬性 描述 是否必要 預設值 items 要被迴圈的資訊 否 無 begin 開始的元素(0=第一個元素,1=第二個元素) 否 0 end 最後一個元

16 API-集合(List的子(ArrayList_Vector_LinkedList,集合巢狀),JDK5新特性(泛型,增強for迴圈,靜態匯入,可變引數)

1:List的子類(掌握) (1)List的子類特點ArrayList:底層資料結構是陣列,查詢快,增刪慢執行緒不安全,效率高Vector:底層資料結構是陣列,查詢快,增刪慢執行緒安全,效率低LinkedList:底層資料結構是連結串列,查詢慢,增刪快執行緒不安全,效率高

c++實現二叉樹的插入、刪除、查詢、樹形列印

binary_tree.h 宣告 #ifndef BINARY_TREE #define BINARY_TREE #include "util.h" template<typename T> class tree_node { public: tree_

集合Set迭代器陣列

import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class IteratorAndArra

C語言實現圖的鄰接矩陣儲存結構及深度優先廣度優先

DFS的核心思想在於對訪問的鄰接節點進行遞迴呼叫;BFS的核心思想在於建立了一個鄰接節點的佇列。 在Dev C++中除錯執行通過。 用下圖進行了測試。 #include <stdio.h> #define MaxVertexNum 50 #defin