c 關於 集合已修改 可能無法執行列舉操作

2021-09-27 11:34:44 字數 1189 閱讀 9375

首先看看原**:

foreach (var executetask in tasks.where(m => m.begintime <= virtualdate).toarray())

else

}

【用的是 foreach遍歷】

說說foreach的用法:用於列舉集合中所有的元素,foreach語句中的 表示式由關鍵字in 隔開的兩個項組成。in左邊是變數名,用於存放該集合中的每個元素。

迴圈過程:每次迴圈,從集合中取出乙個新的元素值,放到唯讀變數中去,如果括號中對的整個表示式返回值是 true,foreach塊中的語句就能執行。一旦集合中的元素都已經被訪問到,整個表示式的值為false,控制流程就轉入到foreach塊後面的執行語句。

foreach經常與陣列一起使用。

陣列的屬性:array.length陣列的容量

遍歷陣列:foreach(type objname in collection/array)

【必須注意的是,借助foreach,只能一一取得陣列中的元素,並不能利用這種語句改變陣列所儲存的元素。】

很明顯tasks.remove(executetask);,違反了最後這條規則,畢竟foreach選出來的 賣藝不賣身,不能對本身造成更改,獲取相應元素的身高三圍。。。咳咳。。。的資訊就行了。

更改後:

var executetask = tasks.where(m => m.begintime <= virtualdate).toarray();

for (int i =0;i< executetask.length;i++)

else

}

【使用for遍歷】

for迴圈遍歷的自由度比較大,但是需要給他初值,限制條件,但是可以每乙個遍歷值進行不可描述的操作。。。

話說,foreach,對應操作的是集合,c#中哪些是常用的集合呢:

arraylist 非泛型集合

hashtable(雜湊表、雜湊表) 非泛型集合

list泛型集合

dictionary

queue

stack

等。。。。

c 集合已修改 可能無法執行列舉操作

今天我用foreach語句去迭代dictionary的時候,發現報錯 網上搜了一下,發現foreach在迭代的時候,foreach在迭代過程,不可以增加和刪除.但是,我試驗了,發現還有乙個問題 在進行值比較並修正的時候,也會報錯,如 1 foreach keyvaluepair soilstrkv ...

集合已修改 可能無法執行列舉操作。

上次寫的socketmanager中的socketserver最近出現個問題。偶爾會報 集合已修改 可能無法執行列舉操作。錯誤。首先想到的是沒有鎖定集合物件。所以先嘗試 lock alsock lock關鍵字用法,多執行緒共用物件時,操作物件時鎖定物件,這樣如果有別的執行緒訪問物件,則自動加入佇列等...

集合已修改 列舉操作可能無法執行。

system.invalidoperationexception collection was modified enumeration operation might not execute.使用foreach或for迴圈刪除datarow的時候出的問題。用dt.rows.removeat 或dt...