首先看看原**:
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...